如何使用 Cypress 绕过验证码

Specialist in Anti-Bot Strategies
真实用户可以通过一种称为 CAPTCHA 的技术来区分自动机器人,CAPTCHA 代表“完全自动化的公共图灵测试,用于区分计算机和人类”。这是一项对人类来说很容易,但对机器人来说很难完成的任务。为了阻止机器人,CAPTCHA 通常放置在网站的特定区域。
最常用的 CAPTCHA 提供商是 Google reCAPTCHA、hCaptcha 和 BotDetect。它们可以帮助解决以下一项或多项难题:
- 基于文本的 CAPTCHA:要解决这些问题,用户必须提供一串乱序字符或数字。
- 基于图像的 CAPTCHA:在照片网格中,用户必须找出特定的东西。
- 基于音频的 CAPTCHA:在这种情况下,系统会提示用户输入他们听到的词语。
- 谜题 CAPTCHA:为了通过,用户必须点击正确的物体以完成小游戏,或者对问题提供简单的答案。
您可以使用依赖于人工操作员实时回答这些问题的服务,或者将您的程序与处理 CAPTCHA 的库进行交互。但是,硬编码的 CAPTCHA 很少见,因为它们不方便且会降低用户体验。
更常见的是,CAPTCHA 是更复杂的反机器人程序(如 WAF)的一部分。
当这些解决方案认为用户可能是机器人时,它们会动态显示 CAPTCHA。在这种情况下,您可以通过让您的机器人像人一样行动并使用真实的浏览器来防止 CAPTCHA。但是,这是一场永无止境的斗争,您需要经常更新您的自动化脚本以应对不断变化的机器人检测算法。
使用基于用户模拟的最新应用程序(如 Scrapeless 的 CAPTCHA 解决方案)是一种更有效的方法来绕过 CAPTCHA。
厌倦了不断被CAPTCHA阻碍你的网页抓取工作?
向您强烈推荐 Scrapeless - 性能强大的一体化网页抓取解决方案。
Scrapeless:目前最好的一体化在线抓取解决方案!
借助我们强大的工具套件,可以轻松发挥数据抓取的全部潜力:
最佳 CAPTCHA 解码器
自动解决复杂的 CAPTCHA 问题,确保持续而丝滑地抓取网页数据。
免费试用开启中!
Cypress 和 CAPTCHA:一种不健康的伙伴关系
Cypress 是一种为当前 Web 设计的前端测试工具。虽然可以使用它进行 Web 抓取和其他通用浏览器自动化活动,但端到端 (E2E) 测试是其主要用例。因此,它主要用于与您拥有或管理的网站和网页交互。
当您使用 Cypress 针对外部或第三方网站时,就会出现问题。官方资料明确表示,最佳做法是尽量减少与第三方网站的交互。文档中提到的主要理由之一,尤其是在被识别为机器人并收到 CAPTCHA 的风险。
为什么会产生这个问题?嗯,因为 CAPTCHA 的目的是阻止自动化程序。因此,它们可能会干扰 Cypress 浏览器的自动化。同样重要的是要注意,虽然很难,但避免 Cypress 的 CAPTCHA 是可行的。请参阅以下部分以了解更多信息!
如何使用 Cypress 管理 CATPCHA
正如您刚刚发现的,Cypress 在其文档中承认 CAPTCHA 是其最大的问题之一。但是,现在还不用放弃。让我们研究一些将 Cypress CAPTCHA 规避逻辑付诸实践的可能策略!
方法 1:关闭 CAPTCHA
大多数 CAPTCHA 提供商允许用户在测试环境中绕过或禁用障碍。然后,如果您负责需要自动化的网站,您必须完全消除 CAPTCHA 或将其替换为更简单的 CAPTCHA。
例如,对于测试情况,您可以使用 reCAPTCHA v3 生成不同的密钥。您可以使用以下测试密钥来使用 reCAPTCHA v2:
- 站点密钥:
6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
- 密钥:
6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
方法 2:使 CAPTCHA 交互自动化
某些 CAPTCHA 就像选中一个复选框一样简单; reCAPTCHA 的“无 CAPTCHA”小部件就是一个例子。
这些任务乍一看可能很简单,但它们可能相当复杂,因为它们会检查您的鼠标移动以确定您是否为人类。但是,并非所有 CAPTCHA 都那么困难。有些更容易绕过,并且旨在阻止简单的机器人。在某些情况下,您可以尝试使用一些 Cypress 逻辑来实现自动化。
请记住,Cypress 无法自动处理跨域 iframe。要解决此限制,请将 cypress.json 文件的 chromeWebSecurity 设置更改为 false:
language
{
"chromeWebSecurity": false
}
接下来,您可以选择并单击 CAPTCHA 复选框元素。在出现 reCAPTCHA“无 CAPTCHA”小部件的情况下,执行该操作的自动化代码将是:
language
cy.get('iframe[src*=recaptcha]')
.its('0.contentDocument')
.should(d => d.getElementById('recaptcha-token').click())
请记住,这只是一个临时的解决方案,在大多数情况下都不会有效。如今,CAPTCHA 已经足够智能,可以区分人类的点击和机器人的点击。最终,这正是 CAPTCHA 的目的。
方法 3:包含一个反机器人浏览器
前面两种 Cypress CAPTCHA 绕过方法过于自信,无法用于实际目标。将 Cypress 设置为管理反检测浏览器是更好的方法。如果您不熟悉这种技术,反检测浏览器是定制的浏览器,旨在阻止网站检测到自动化行为。
接下来,您可以向 Cypress 提供以下说明,以在指定的浏览器中启动脚本:
language
cypress open --browser <path_to_your_browser>
在本例中,表示包含反检测浏览器二进制文件的绝对路径_to_your_browser。
类似地,通过将以下代码添加到 cypress.config.js,您可以设置 Cypress UI 以显示您的反检测浏览器作为可选择选项:
language
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
setupNodeEvents(on, config) {
const antidetectBrowser = {
name: '<ANTIDETECT_BROWSER_NAME>',
channel: 'stable',
family: 'chromium',
displayName: '<ANTIDETECT_BROWSER_DISPLAY_NAME>',
version,
path: '<path_to_your_browser>',
majorVersion,
}
return {
browsers: config.browsers.concat(antidetectBrowser),
}
},
},
})
请记住,告诉 Cypress 在具有反检测功能的浏览器中执行您的自动化代码只会降低它被解释为机器人的可能性。但是,反机器人系统仍然可能会强加一些 CAPTCHA,以防止您在识别到您正在使用自动化代码时继续。
结论
您阅读这篇文章是为了了解 CAPTCHA 以及它们对 Cypress 构成重大问题的原因。您还研究了三种绕过 CAPTCHA 的替代方法,尽管这些策略中的每一种都有明显的缺点。
即使使用经过良好开发的 Cypress 绕过 CAPTCHA 逻辑,您的脚本仍然可能被强大的机器人检测系统标记为自动化的。使用解锁 API 连接到您的目标网站是最好的做法,该 API 可以提供任何页面(无需 CAPTCHA)的 HTML。
存在这样的 API;它被称为 Web Unlocker。通过代理集成,它管理浏览器指纹识别,在每次请求时自动旋转退出 IP,启动自动重试,并为您解决 CAPTCHA。反机器人预防措施现在变得轻松自如!
在Scrapeless,我们仅访问公开数据,同时严格遵守适用的法律、法规和网站隐私政策。 本博客内容仅用于演示目的,不涉及任何非法或侵权行为。 对于使用本博客或第三方链接的信息,我们不做任何保证,也不承担任何责任。 在参与任何抓取活动之前,请咨询您的法律顾问并查看目标网站的服务条款或获取必要的权限。