公司动态

使用 Cypress 绕过 CAPTCHA

📅 2026/8/20 15:20:32
使用 Cypress 绕过 CAPTCHA
本指南介绍如何在 Cypress 中处理 CAPTCHA包括有效的绕过方法以及当 CAPTCHA 仍然出现时的应对措施帮助实现流畅的浏览器自动化。什么是 CAPTCHA能否自动化CAPTCHA 与 Cypress一段“艰难”的关系如何在 Cypress 中处理 CAPTCHA方法一禁用 CAPTCHA方法二自动化与 CAPTCHA 的交互方法三集成反检测浏览器这些 Cypress 方案都不奏效时该怎么办什么是 CAPTCHA能否自动化CAPTCHA全称为 Completely Automated Public Turing test to tell Computers and Humans Apart是一种安全机制用于区分真实用户与自动化脚本。它会给出对人类较易、对机器较难的挑战常被放置在网页关键位置以阻止机器行为。常见 CAPTCHA 类型常见的提供商包括 Google reCAPTCHA、hCaptcha 和 BotDetect。CAPTCHA 通常属于以下一种或多种类型文本型 CAPTCHA要求用户输入一串扭曲的字母或数字。图片型 CAPTCHA要求用户在图片网格中识别特定物体。音频型 CAPTCHA要求用户根据音频片段输入听到的词语。拼图型 CAPTCHA要求用户完成简单挑战如点击特定对象或回答问题。CAPTCHA 的使用方式CAPTCHA 常被集成在关键用户流程如表单提交中以防止自动化完成操作![请添加图片描述](https://i-blog.csdnimg.cn/direct/b434384a8fab40a8b9db3e6e584b69d0.png在这类场景中CAPTCHA 始终显示无法通过简单的自动化技巧绕过。一些解题服务会使用人工操作员或专门的 AI 模型实时解题但硬编码强制显示 CAPTCHA 的情况相对较少因为它会影响用户体验。高级反机器人系统中的 CAPTCHA更常见的是CAPTCHA 是高级反机器人系统如 Web 应用防火墙 WAF了解更多的一部分在此类系统中网站在怀疑用户可能是机器人时会动态触发 CAPTCHA。这意味着通过让自动化行为更像真人如使用真实浏览器并模拟人类交互有时可以避免触发。然而绕过 CAPTCHA 始终充满挑战因为反爬与反机器人技术在不断演进。自动化脚本也需要频繁更新以对抗新的检测手段。CAPTCHA 与 Cypress一段“艰难”的关系Cypress 是一款为现代 Web 设计的前端测试工具。尽管它也可用于网页自动化如抓取但其核心定位是端到端E2E测试。这意味着 Cypress 最适合在您可控的网站与应用上使用。当 Cypress 用于外部或第三方网站时可能会出现问题。官方文档建议尽量避免与第三方站点交互。关键原因之一是存在被识别为机器人并遇到 CAPTCHA 的风险。CAPTCHA 的设计目标就是阻止自动化脚本包括在 Cypress 测试环境中运行的脚本。一旦出现 CAPTCHA可能会打断 Cypress 的自动化流程导致测试无法顺利完成。不过尽管在 Cypress 中绕过 CAPTCHA 具有挑战性但并非完全不可能。接下来将介绍在 Cypress 自动化中处理 CAPTCHA 的潜在方案与权衡。如何在 Cypress 中处理 CAPTCHA虽然 CAPTCHA 是 Cypress 的主要挑战之一但也不必就此放弃。让我们探讨几种可行思路。方法一禁用 CAPTCHA大多数 CAPTCHA 提供商允许在测试环境中禁用或绕过挑战。如果您能够控制目标站点考虑在测试环境中完全关闭 CAPTCHA或替换成更简单的版本。例如使用 reCAPTCHA v3 时您可以为测试环境创建单独的密钥。对于 reCAPTCHA v2可使用以下测试密钥Site key6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhISecret key6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe使用这些密钥时您将总是看到如下的 reCAPTCHA “No CAPTCHA” 小组件该设置会显示特殊警告信息说明此 CAPTCHA 不适用于生产环境。自动点击此提示即可确保反机器人验证总是通过。更多详情参见 reCAPTCHA 文档。其他 CAPTCHA 提供商也为测试环境提供类似选项。方法二自动化与 CAPTCHA 的交互有些 CAPTCHA 只需要基础交互例如点击一个复选框如 reCAPTCHA 的 “No CAPTCHA” 组件。虽然这类挑战看似简单但往往会分析鼠标移动等行为信号来判断是否为真人。不过并非所有 CAPTCHA 都如此先进有些仅用于阻挡最基础的脚本因而更易绕过。在这类情况下可以尝试用 Cypress 的逻辑进行自动化。检查上例的 CAPTCHA 元素会发现它嵌入在一个 iframe 中。这对大多数 CAPTCHA 提供商来说都很常见。由于 Cypress 无法自动处理跨域 iframe请在cypress.json文件中将chromeWebSecurity设置为false{chromeWebSecurity:false}随后选择 CAPTCHA 的复选框元素并点击。对于 reCAPTCHA 的 “No CAPTCHA” 组件示例自动化代码如下cy.get(iframe[src*recaptcha]).its(0.contentDocument).should(dd.getElementById(recaptcha-token).click())需要注意的是CAPTCHA 已足够智能能区分机器人点击与人类点击因此此变通方法在大多数情况下并不可靠。今日可行的方案明日可能失效。欲了解最新做法可查看该方案来源的 GitHub gist。方法三集成反检测浏览器前两种绕过方法依赖假设较多。更高效的方案是配置 Cypress 去控制反检测浏览器。默认情况下Cypress 可使用本地已安装的以下浏览器之一见列表ChromeChrome BetaChrome CanaryChromiumEdgeEdge BetaEdge CanaryEdge DevElectronFirefoxFirefox Developer EditionFirefox NightlyWebKit试验性它也支持任意基于 Chromium 的浏览器。请选择其中一个基于 Chromium 的浏览器并安装。然后指示 Cypress 使用指定浏览器启动脚本cypressopen--browserpath_to_your_browser其中path_to_your_browser为包含您的反检测浏览器可执行文件的文件夹绝对路径。同样您可以在cypress.config.js中添加如下代码让 Cypress UI 将该反检测浏览器显示为可选择项import{defineConfig}fromcypressexportdefaultdefineConfig({e2e:{setupNodeEvents(on,config){constantidetectBrowser{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 来阻断。这些 Cypress 方案都不奏效时该怎么办上述三种方法各有明显局限方法一要求您能访问目标站点代码对外部在线站点不适用。方法二仅对非常简单的 CAPTCHA 有效且可靠性不足。方法三意味着额外成本只是降低触发 CAPTCHA 的概率不能真正“解题”。尽管都值得尝试但它们都无法让您在 Cypress 自动化中以编程方式稳定地绕过 CAPTCHA。如果您需要真正的 Cypress CAPTCHA 处理方案试试 Bright Data 的网页抓取解决方案。其具备专用 CAPTCHA 解决功能可自动处理 reCAPTCHA、hCaptcha、px_captcha、SimpleCaptcha、GeeTest CAPTCHA、FunCaptcha、Cloudflare Turnstile、AWS WAF Captcha、KeyCAPTCHA 等多种类型。现在即可开启免费试用。