Я столкнулся с проблемой с SeleniumBase при попытке автоматизировать отправку формы, которая включает CAPTCHA турникета Cloudflare. Сценарий завершается с ошибкой NoSuchElementException при попытке найти элемент iframe после ожидания в течение 7 секунд.
https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_form_turnstile.py
from seleniumbase import SB
with SB(uc=True, test=True) as sb:
url = "seleniumbase.io/apps/form_turnstile"
sb.uc_open_with_reconnect(url, 2)
sb.press_keys("#name", "SeleniumBase")
sb.press_keys("#email", "[email protected]")
sb.press_keys("#phone", "1-555-555-5555")
sb.click('[for = "date"]')
sb.click("td.is-today button")
sb.click('div[class = "select-wrapper"] input')
sb.click('span:contains("9:00 PM")')
sb.highlight_click('input[value = "AR"] + span')
sb.click('input[value = "cc"] + span')
sb.scroll_to("iframe")
sb.uc_gui_handle_cf()
sb.highlight("img#captcha-success", timeout=3)
sb.highlight_click('button:contains("Request & Pay")')
sb.highlight("img#submit-success")
sb.highlight('button:contains("Success!")')
Сообщение об ошибке, которое я получаю:
seleniumbase.common.exceptions.NoSuchElementException: Message: Element {iframe} was not present after 7 seconds!
Мы будем очень признательны за любые идеи или предложения о том, как решить эту проблему iframe с помощью CAPTCHA турникета Cloudflare!
Попробуйте новую версию с помощью seleniumbase
4.28.7
(или новее):
from seleniumbase import SB
with SB(uc=True, test=True) as sb:
url = "seleniumbase.io/apps/form_turnstile"
sb.uc_open_with_reconnect(url, 2)
sb.press_keys("#name", "SeleniumBase")
sb.press_keys("#email", "[email protected]")
sb.press_keys("#phone", "1-555-555-5555")
sb.click('[for = "date"]')
sb.click("td.is-today button")
sb.click('div[class = "select-wrapper"] input')
sb.click('span:contains("9:00 PM")')
sb.highlight_click('input[value = "AR"] + span')
sb.click('input[value = "cc"] + span')
sb.scroll_to("div.cf-turnstile-wrapper")
sb.uc_gui_handle_cf()
sb.highlight("img#captcha-success", timeout=3)
sb.highlight_click('button:contains("Request & Pay")')
sb.highlight("img#submit-success")
sb.highlight('button:contains("Success!")')
В сценарий было внесено небольшое изменение после того, как Cloudflare спрятал iframe
в закрытом Shadow Root. (https://github.com/seleniumbase/SeleniumBase/commit/f007dcf607293c42dd2b36a76339c2dd68ec8b7f). Кроме того, seleniumbase
4.28.7
внесены изменения в связи с другими обновлениями Cloudflare.