首页 > 编程问答 >SeleniumBase 示例失败 Cloudflare Turnstile

SeleniumBase 示例失败 Cloudflare Turnstile

时间:2024-07-21 04:49:36浏览次数:13  
标签:python selenium-webdriver seleniumbase cloudflare-turnstile

我在尝试自动提交包含 Cloudflare Turnstile CAPTCHA 的表单时遇到了 SeleniumBase 的问题。等待 7 秒后尝试查找 iframe 元素时,脚本失败并出现 NoSuchElementException。

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!")')

错误消息 I我得到的是:

seleniumbase.common.exceptions.NoSuchElementException: Message: Element {iframe} was not present after 7 seconds!

任何有关如何使用 Cloudflare 的 Turnstile CAPTCHA 处理此 iframe 问题的见解或建议,我们将不胜感激!


该错误消息表明,在 SeleniumBase 示例中指定的时间段(7 秒)内,无法在页面上找到 iframe 元素。这表明该页面本身的加载速度可能比预期慢,或者 iframe 元素的加载速度比主 HTML 内容慢。

以下是如何解决此问题的几种方法:

  1. 增加超时时间:

最简单的解决方案是增加 sb.uc_gui_handle_cf() 函数的等待时间。这将为页面加载 iframe 元素提供更多时间。可以通过修改如下所示的代码行来实现这一点:

python sb.uc_gui_handle_cf(timeout=15)

这会将等待时间增加到 15 秒。根据的网络连接和页面的加载时间调整该值。

  1. 等待特定的 iframe 元素:

与其仅仅等待一个通用的 iframe ,不如等到包含 Cloudflare Turnstile challenge 的特定 iframe 出现。可以通过检查页面的 HTML 源代码并查找包含 challenge 的 iframe 来实现这一点。找到后,使用 SeleniumBase 的等待功能之一,例如 wait_for_element_present() wait_for_element_visible() ,直到 iframe 可用。

例如,如果 iframe 有一个唯一的 ID:

python sb.wait_for_element_present("#cf-turnstile-iframe", timeout=10) sb.uc_gui_handle_cf()

  1. 调查 Cloudflare Turnstile 的延迟加载:

Cloudflare Turnstile 可能使用延迟加载技术,该技术仅在需要时才加载 challenge。这意味着在满足某些条件之前, iframe 元素可能不会立即存在于页面源代码中。要解决此问题,需要确定触发 Turnstile 加载的操作,并使用 SeleniumBase 模拟该操作。这可能涉及滚动到页面上的特定位置,将鼠标悬停在某个元素上或与表单交互。

例如,如果 Turnstile 在提交按钮可见时加载:

python submit_button = sb.find_element('button:contains("Request & Pay")') sb.scroll_to(submit_button) sb.uc_gui_handle_cf()

  1. 禁用 Cloudflare Turnstile(测试目的):

如果正在测试环境中工作,则可以考虑暂时禁用 Cloudflare Turnstile。这将允许在不处理 CAPTCHA 的情况下自动执行测试。 请记住,在生产环境中启用 Cloudflare Turnstile 非常重要,以防止滥用行为。

请记住,自动绕过 Cloudflare Turnstile 等安全措施可能会违反其服务条款。始终优先考虑道德测试实践,并在生产环境中保留安全措施。

标签:python,selenium-webdriver,seleniumbase,cloudflare-turnstile
From: 78773882

相关文章

  • 除了curses之外,是否有一个python包可以轻松控制终端的输出?
    我现在正在处理一些小项目,我对GUI的偏好是终端中漂亮的文本界面。我宁愿不强迫用户处理Windowscurses二进制文件,所以我正在寻找不同的选项。我已经发现了asciimatics,但我想考虑所有可能的选择。如果有人有任何经验或知道解决此用例的包,我将不胜感激。谢谢你说的没错......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • 使用 python print 和 gdb 时出现 BrokenPipeError
    我正在尝试在Linux中运行应用程序并使用Python生成输入:python3-c'print(".....")'|./someapp但出现下一个错误:Exceptionignoredin:<_io.TextIOWrappername='<stdout>'mode='w'encoding='utf-8'>BrokenPipeError:......
  • python 舰队容器
    我正在尝试使用容器在flet中制作一个菜单,它应该是半透明的,但其中的项目不是。我尝试将opacity=1分配给元素,但没有成功-它们与容器一样透明感谢任何帮助我的代码:nickname=ft.TextField(label="xxx",hint_text="xxx")column=ft.Column(controls=[nickname......
  • Python应用程序跨子包共享的配置文件
    我正在构建一个应用程序来控制一些硬件。我在包中实现了不同类型的硬件:电机和测量设备。我的文件结构如下:name_of_my_app/__init__.pymain.pyconfig.iniCONFIG.pymotors/__init__.pyone_kind_of_motor.pymeasurement_devices/......
  • python中时间序列数据的梯度计算
    我正在尝试编写一个函数,它可以从最适合下面的线返回梯度dataframe在浏览了谷歌的几个资源之后,我仍然不确定这是如何完成的。我明白最佳拟合线的计算公式为:y=mx+b将因变量(y)设置为foos,将自变量(x)设置为DateTimeDatafram......
  • 调试用 C 编写的 Python 扩展
    我非常熟悉编写C代码,并且很擅长编写Python代码。我正在尝试学习如何用C编写可以从OSX10.15.7上的Python-3.9.X调用的模块。我已经得到了几个“helloworld”类型的示例,但是对于复杂的示例,我正在努力弄清楚如何调试我编写的C扩展。MWE:src/add.c//......
  • 具有块大小选项的 Python pandas read_sas 因索引不匹配而失败并出现值错误
    我有一个非常大的SAS文件,无法容纳在我的服务器内存中。我只需要转换为镶木地板格式的文件。为此,我使用pandas中chunksize方法的read_sas选项分块读取它。它主要是在工作/做它的工作。除此之外,一段时间后它会失败并出现以下错误。此特定SAS文件有794......
  • 使用 requests 包 python 时打开文件太多
    我正在使用Pythonrequests包向API发出大量请求。然而,在某些时候,我的程序由于“打开的文件太多”而崩溃。当我明确关闭我的会话时,我真的不知道这是怎么回事。我使用以下代码:importrequestsimportmultiprocessingimportnumpyasnps=requests.session()s.keep......
  • Python 是一种选择性解释语言吗?为什么下面的代码不起作用?
    由于程序是从上到下运行的,为什么下面的代码不执行块中的第一行就直接抛出错误?if5>2:print("TwoislessthanFive!")print("Fiveisgreaterthantwo!")错误:文件“/Users/____/Desktop/Pythonpractise/practise.py”,第3行print("五比二大!")Indentati......