【问题标题】:How can I click "invisible" reCAPTCHA buttons using Selenium web automation?如何使用 Selenium Web 自动化单击“不可见”的 reCAPTCHA 按钮?
【发布时间】:2021-11-27 02:01:28
【问题描述】:

我正在使用 Python 和 Selenium 来自动化这个网站:https://prenotami.esteri.it

我制作的脚本填写了一个表格,然后单击一个按钮前进到下一页。这些操作是使用 Selenium 的 find_element_by_xpath() 函数执行的。最近网站新增了reCAPTCHA,点击按钮后会弹出,必须完成后才能进行。

我已经编写了一个 Python 脚本,它能够通过使用音频选项来超越这种类型的验证码。但是,在这个特定的网站中,我找不到 reCAPTCHA 的音频按钮的 xpath。虽然有一个包含 reCAPTCHA 的 iframe,但里面似乎没有任何内容。

在附上的第一张图片中,您可以看到该网站的 reCAPTCHA 在 HTML 中的样子,与在第二张图片中可见的其他网站相比,在 iframe 中可以看到 #document

我的目的是使用无头 Chrome 运行这个程序,所以我不能在 pyautogui 提供的任何鼠标控制功能中进行中继。

我一直在为这个问题摸不着头脑,所以任何建议都是有用的。谢谢!

编辑: 经过一番研究,我发现这种不需要勾选“我不是机器人”复选框的 reCAPTCHA 被称为“隐形 reCAPTCHA”。只有在检测到的活动可疑(例如点击太快)时才会弹出验证码。我尝试添加随机等待和动作来模仿人类行为,但经过一些尝试后验证码仍然出现。由于我认为没有办法避免验证码 100% 出现,因此如何使用 Selenium 的 find_element_by_xpath() 函数单击按钮的问题仍然相同。将此作为注释,以防有人发现它有用。

【问题讨论】:

  • 我希望自动化同一个网站(不是阿根廷版,而是巴西版)。你成功了吗?
  • 我还没有时间继续这个项目,但我已经尝试了接受的解决方案,以便与验证码进行交互,并且效果很好。如果您将其与 VPN 一起使用,您应该能够将其自动化。

标签: python html selenium automation recaptcha


【解决方案1】:

曾尝试使用以下功能:

add_argument("-auto-open-devtools-for-tabs")

我设法与验证码进行交互

【讨论】:

    【解决方案2】:

    如果位置一直固定,可以使用PyAutoGUI移动鼠标点击

    import pyautogui
    
    pyautogui.click(100, 100) # button coordinates
    

    【讨论】:

    • 正如我在最初的问题中提到的那样:“我的目的是使用无头 Chrome 运行这个程序,所以我不能在 pyautogui 提供的任何鼠标控制功能中进行中继。” 所以是的,我知道这个解决方案存在,但它对我的情况没有用。还是谢谢你。
    • @LisandroMarinelli 你确定 iframe 是空的吗?在屏幕截图上,你还没有炸开它
    • 是的,里面只有一个。无论如何,我已经更新了图像以避免混淆。还有其他想法吗?
    【解决方案3】:

    由于它在 iframe 中,我们需要将 selenium 指向 iframe,然后使用您的 xpath。

    driver.switch_to.frame("c-la7g7xqfbit4")
    capchaBtn = driver.find_element_by_xpath("(//button[@id='recaptcha-audio-button'])[2]")
    

    【讨论】:

    • 我试过了,但没有用。此方法适用于大多数使用“正常”reCAPTCHA(第二张图片)的网站,但不适用于使用“不可见”reCAPTCHA(第一张图片)的网站,例如我试图自动化的网站。虽然可以看到 recaptcha 音频按钮,但我在 HTML 代码中的任何地方都找不到它。另外,作为旁注,由于每次加载页面时 iframe 名称都会更改,因此正确的做法是使用 driver.switch_to.frame(n) 其中 n 是 iframe 编号。
    • 对此还有另一种解决方案。我们可以根据标签名称获取元素。然后切换到 iframe 并单击它们。参考此链接--guru99.com/handling-iframes-selenium.html
    • 感谢您的帮助,但我相信您并没有完全理解我的问题。我已经找到了验证码 iframe,并且我知道如何切换到那个特定的 iframe。问题是 iframe 是空的,里面没有元素。所以我无法获取 recaptcha-audio-button 标记,因为虽然它是可见且可点击的,但它只是不存在于 HTML 代码中。
    • 最后一个建议,能不能加个时间延迟,因为如果我们在页面构建之前尝试,我们不会得到这样的元素异常
    • 已经实现了time.sleep() 以确保网站加载所有内容。
    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多