在本文中,你将学习:
- 什么是 CAPTCHA 以及是否可以绕过它们
- Cypress 与 CAPTCHA 之间的关系
- 如何实现 Cypress CAPTCHA 绕过逻辑
- 如果 CAPTCHA 仍然出现该怎么办
让我们开始吧!
什么是 CAPTCHA 以及是否可以自动化它?
CAPTCHA,即“全自动区分计算机和人类的图灵测试”,是一种用来区分真实用户和自动化机器人的方法。这是一种设计上对人类来说简单但对机器来说有挑战性的任务。通常,CAPTCHA 用于网页的特定部分,以防止机器人访问。
Google reCAPTCHA、hCaptcha 和 BotDetect 是最受欢迎的 CAPTCHA 提供商。这些提供商支持以下一种或多种挑战:
- 基于文本的 CAPTCHA:用户需要输入一串扭曲的字母和/或数字。
- 基于图像的 CAPTCHA:用户需要在一组图像中识别特定的对象。
- 基于音频的 CAPTCHA:用户需要输入他们听到的单词。
- 拼图 CAPTCHA:用户必须回答一个简单的问题或解决一个简单的小游戏,如点击正确的实体。
CAPTCHA 可以集成到特定的用户流程中,以防止机器人完成这些流程,例如提交表单:
在这些情况下,CAPTCHA 总是会显示,自动化逻辑无法轻易绕过。你可以将软件与 CAPTCHA 解决库集成,或利用依赖人工操作员实时解决这些挑战的服务。然而,硬编码的 CAPTCHA 并不常见,因为它们令人厌烦并降低用户体验。
更常见的是,CAPTCHA 是更高级的反机器人解决方案(如 Web 应用防火墙)的一部分:
这些解决方案在怀疑当前用户可能是机器人时动态显示 CAPTCHA。在这种情况下,可以通过让机器人表现得像人类并使用真实的浏览器来避免 CAPTCHA。然而,这是一场持续的战斗,需要不断更新你的自动化脚本,以应对不断演变的机器人检测措施。
一种更有效的绕过 CAPTCHA 的解决方案是使用始终保持最新的用户模拟工具,例如 Bright Data 的CAPTCHA Solver。
CAPTCHA 和 Cypress:一段糟糕的关系
Cypress 是一个为现代 Web 构建的前端测试工具。虽然它可以用于一般的浏览器自动化任务(如网页抓取),但其主要关注点是端到端(E2E)测试。这意味着它主要用于与你控制的网站和网页进行交互。
使用 Cypress 目标外部或第三方网站时问题就开始出现。如在官方文档中所指出的,最佳实践是尽量避免与第三方网站互动。文档中指出的主要原因之一就是被检测为机器人并遇到 CAPTCHA 的风险。
为什么这是个问题?因为 CAPTCHA 的设计初衷就是阻止自动化脚本。因此,它们会妨碍你的 Cypress 浏览器自动化操作。同时需要注意的是,在 Cypress 中绕过 CAPTCHA 是困难的,但并非不可能。继续阅读下一节内容了解更多!
如何在 Cypress 中处理 CAPTCHA
如你所知,CAPTCHA 是 Cypress 的主要挑战之一,这一点在工具的文档中也得到了认可。然而,现在还不是放弃的时候。让我们探索一些实现 Cypress CAPTCHA 绕过逻辑的潜在方法!
方法一:禁用 CAPTCHA
CAPTCHA 提供商通常提供一种在测试环境中禁用或跳过挑战的方法。如果你可以控制需要执行自动化的网站,那么你应该禁用 CAPTCHA 机制或用更简单的版本替代它。
例如,在 reCAPTCHA v3 中,你可以为测试环境创建一个单独的密钥。对于 reCAPTCHA v2,你可以使用以下测试密钥:
- 站点密钥:
6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
- 密钥:
6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
使用这些密钥时,你将始终看到如下所示的 reCAPTCHA “No 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(d => d.getElementById('recaptcha-token').click())
记住,这只是一个变通方法,在大多数情况下都不起作用。CAPTCHA 已经足够复杂,能够区分机器人和人类的点击。毕竟,这正是 CAPTCHA 的本质。
自动化 CAPTCHA 是一场猫捉老鼠的游戏,今天有效的方法明天可能就无效了。有关最新方法,请查看GitHub gist,此方法源自该文档。
方法三:集成防检测浏览器
前两种 Cypress CAPTCHA 绕过方法需要太多假设,无法用于真实目标。更有效的解决方案是配置 Cypress 以控制防检测浏览器。如果你不熟悉这种工具,防检测浏览器是一种专门设计的浏览器,用于防止网站检测到自动化行为。
默认情况下,Cypress 提供访问以下列表中的本地安装浏览器之一的权限:
- Chrome
- Chrome Beta
- Chrome Canary
- Chromium
- Edge
- Edge Beta
- Edge Canary
- Edge Dev
- Electron
- Firefox
- Firefox Developer Edition
- Firefox Nightly
- WebKit (实验性)
除了这些,它还支持任何基于 Chromium 的浏览器。因此,从市场上最佳防检测浏览器列表中选择一个基于 Chromium 的浏览器,购买、下载并安装到你的机器上。
然后你可以指示 Cypress 启动指定浏览器的脚本,如下所示:
cypress open --browser <path_to_your_browser>
其中<path_to_your_browser>
是防检测浏览器二进制文件所在文件夹的绝对路径。
同样,你可以通过在cypress.config.js
中添加以下代码,配置 Cypress UI 以显示防检测浏览器作为可选项:
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 来阻止你。
上述 Cypress CAPTCHA 绕过解决方案无效:现在该怎么办?
以上介绍的三种方法都有一些主要的缺点:
- 方法一:需要你能够访问目标网站的代码,这在处理外部在线网站时并不适用。
- 方法二:仅适用于非常简单的 CAPTCHA,不是可靠的技术。
- 方法三:需要你购买外部服务,可能还需要为代理集成花费额外费用,并且只帮助避免 CAPTCHA,而不是解决它们。
虽然它们都值得尝试,但没有一种方法能让你在 Cypress 自动化中编程地绕过 CAPTCHA。
寻找真正的 Cypress CAPTCHA 绕过者?试试 Bright Data 网页抓取解决方案吧!
这些解决方案提供了卓越的解锁能力,得益于专用的 CAPTCHA 解决功能,可以自动处理 reCAPTCHA、hCaptcha、px_captcha、SimpleCaptcha、GeeTest CAPTCHA、FunCaptcha、Cloudflare Turnstile、AWS WAF Captcha、KeyCAPTCHA 等许多 CAPTCHA。
将 Bright Data 的 CAPTCHA Solver 集成到你的脚本中很简单,因为它可以与任何 HTTP 客户端或浏览器自动化工具(包括 Cypress)一起使用。
了解更多关于如何使用 Bright Data 的 Web Unlocker。还可以查看文档,了解所有集成和配置详情。
结论
在本文中,你了解了 CAPTCHA 以及为什么它们对 Cypress 构成重大挑战。你还探索了三种不同的绕过方法,但每种方法都有严重的限制。
无论你的 Cypress CAPTCHA 绕过逻辑多么先进,复杂的机器人检测系统可能仍会将你的脚本识别为自动化脚本。最好的解决方案是通过一个可以返回任何网页的无 CAPTCHA HTML 的解锁 API 连接到目标网站。
这种 API 存在,叫做Web Unlocker。它通过代理集成自动轮换每个请求的出口 IP,处理浏览器指纹,执行自动重试,并为你解决 CAPTCHA。反机器人措施不再是令人头疼的问题!
立即注册,看看哪种 Bright Data 产品最适合你的需求。今天就开始免费试用吧。