Пример SeleniumBase не работает с турникетом Cloudflare

Я столкнулся с проблемой с 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!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте новую версию с помощью seleniumbase4.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). Кроме того, seleniumbase4.28.7 внесены изменения в связи с другими обновлениями Cloudflare.

Другие вопросы по теме