我正在尝试使用 Selenium 从该网站抓取汽车详细信息:https://www.autoscout24.ch/de/autos/alle-marken?vehtyp=10
大约每 30 页我就必须验证我不是机器人, 即使我已经包含在我的代码中:
driver.implicitly_wait(20)
有什么办法可以克服这个问题吗?
关于如何解决您的问题,我会想到 2 个选项,您选择哪一个取决于您的需要。
您可以让脚本在检测到验证码时等待,并在显示验证码时播放声音,这样您就可以自己手动执行验证码,处理验证码后您可以让脚本继续执行它的操作。请参阅如何在 Selenium 中处理验证码
要使用验证码解决服务,您需要支付一点费用,但不需要手动执行任何操作。检查这个答案
中提到的参考资料验证码正是出于这些原因。由于在 Selenium 脚本中使用
waits
,它与被删除没有关联。使用验证码是为了检测机器人/自动化系统是否没有抓取网页。
除非您禁用它,否则我认为这不是自动化它的正确方法。虽然您可能会在网络上找到一些教程来克服它,但它们非常零散并且没有涵盖所有用例。
“我不是机器人”复选框,俗称reCAPTCHA v2,是实践中实施质询响应身份验证的安全措施之一。 CAPTCHA(区分计算机和人类的完全自动化公共图灵测试)主要通过要求完成一个简单的测试来证明它是人类而不是计算机,从而帮助保护应用程序和系统免受垃圾邮件和密码解密访问受密码保护的帐户。简而言之,验证码的实施是为了帮助防止未经授权的帐户进入。
因此,wait机制隐式等待或显式等待都无法帮助避免CAPTCHA
理想的方法是在 Testing / Staging 环境中禁用 AUT(测试中的应用程序)的 CAPTCHA,并仅在生产环境中启用它。
您可以在以下位置找到一些相关的详细讨论:
您可以尝试使用代理或像 Puppeteer 这样的无头浏览器,但如果您想真正针对验证码完全验证您的脚本,可能值得使用具有指纹模拟和块绕过技术的抓取工具。我一直在使用这个,因为它可以轻松集成到现有的 Puppeteer/Selenium/Playwright 脚本中,并附带内置的解锁技术,可自动处理浏览器指纹模拟/标头信息/cookie 管理等事务(这解决了问题的一个主要部分,防止网站将您标记为潜在的机器人并首先生成验证码),并且还可以解决大多数验证码,如 reCAPTCHA、hCaptcha、px_captcha、SimpleCaptcha 等。几乎消除了依赖的需要在第三方库或代码中的其他代理上。