如何使用 Selenium 网络自动化单击 "invisible" reCAPTCHA 按钮?

How can I click "invisible" reCAPTCHA buttons using Selenium web automation?

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

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

我已经编写了一个 Python 脚本,它能够通过使用音频选项超越这种类型的验证码。但是,在这个特定的网站中,我无法找到 reCAPTCHA 的音频按钮的 xpath。虽然有一个包含reCAPTCHA的iframe,但是里面好像什么都没有。

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

我的意图是运行这个程序使用headless Chrome,所以我不能在pyautogui提供的任何鼠标控制函数中进行中继。

我已经为这个问题绞尽脑汁了一段时间,所以任何建议都是有用的。谢谢!

编辑: 经过一些研究,我发现这种不需要勾选“我不是机器人”复选框的 reCAPTCHA 称为“隐形 reCAPTCHA” .验证码仅在检测到的 activity 可疑时弹出(例如点击速度过快)。我尝试添加随机等待和动作来模仿人类行为,但经过一些尝试后验证码仍然出现。由于我认为没有办法避免验证码 100% 出现,所以如何使用 Selenium 的 find_element_by_xpath() 函数单击按钮的问题保持不变。留下这个作为注释以防万一有人觉得它有用。

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

import pyautogui

pyautogui.click(100, 100) # button coordinates

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

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

曾尝试使用以下功能:

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

我成功地与验证码互动了