如何使用 Playwright 绕过 CAPTCHA

了解如何使用 Playwright 绕过 CAPTCHA,确保你的网络爬虫任务顺利进行,不受干扰。
2 min read
如何使用 Playwright 绕过 CAPTCHA

在本指南中,你将学习到:

  • 什么是 CAPTCHA 以及是否可以绕过它
  • 如何实现 Playwright CAPTCHA 绕过逻辑
  • 如果 CAPTCHA 仍然出现,该怎么办。

让我们开始吧!

什么是 CAPTCHA?你能绕过它们吗?

CAPTCHA,全称“完全自动化的图灵测试以区分计算机和人类”,是一种用于区分人类用户和自动化机器人的测试。它是一种专门设计的挑战,对人类来说很容易,但对机器来说很难解决。

CAPTCHA 示例

流行的 CAPTCHA 提供商包括 Google reCAPTCHA、hCaptcha 和 BotDetect。这些通常支持以下一种或多种 CAPTCHA 类型:

  • 基于图像的挑战:用户必须在一组图像中识别特定的物体,或识别符合给定假设的图像。
  • 基于文本的挑战:用户需要输入一系列扭曲的字母和数字。
  • 基于音频的挑战:用户需要输入他们听到的单词。
  • 拼图挑战:用户必须解决一个简单的拼图,例如将一个部分滑动到位。

CAPTCHA 可能是特定用户流程的一部分,例如提交表单的最后一步:

提交表单过程中的 CAPTCHA 示例

在这些情况下,CAPTCHA 总是显示,机器人无法真正绕过。你可以做的是将你的软件与 CAPTCHA 解决库集成,以自动解决这些挑战,或者依赖人类操作员实时解决这些挑战的服务。然而,硬编码的 CAPTCHA 并不常见,因为它们令人烦恼并破坏用户体验。

更常见的是,CAPTCHA 被用作更广泛的反机器人解决方案的一部分,例如 WAF(Web 应用防火墙):

Web 应用防火墙示例

这些系统在怀疑用户可能是机器人时会动态显示 CAPTCHA。在这些情况下,可以通过让你的机器人模仿人类行为来绕过 CAPTCHA。然而,这是一场需要不断更新你的自动化脚本以避免新机器人检测措施的猫鼠游戏。

更有效的 CAPTCHA 绕过解决方案是使用基于用户模拟且始终保持最新的工具,如 Bright Data 的 CAPTCHA Solver

Playwright 绕过 CAPTCHA:分步教程

如你所学到的,有效的方法是让你的自动化脚本模拟人类行为,同时使用类似人类的指纹。为此,最好的工具之一是 Playwright,这是一款领先的浏览器自动化库,列入了年度最佳网络爬虫工具列表。

在本教程部分,你将看到如何实现 Playwright CAPTCHA 绕过逻辑。你将学习如何使用 JavaScript 中的 Node.js 脚本实现这一目标。如果你是 Python 开发人员,可以查看我们关于 Playwright Stealth 的等效指南。

让我们开始吧!

步骤 #1:初始化你的 Node.js 项目

如果你已经有一个 Playwright 网络爬虫或测试脚本,可以跳过此步骤。否则,请为你的 Playwright CAPTCHA 解决器项目创建一个文件夹并在终端中进入该文件夹:

mkdir playwright_demo

cd playwright_demo

使用以下 npm init 命令在其中初始化一个新的 Node.js 项目:

npm init -y

在你最喜欢的 JavaScript IDE 中打开项目文件夹,并添加一个新的 script.js 文件。

在 IDE 中添加新的 script.js 文件

然后,别忘了打开 package.json 并通过添加以下内容将你的项目标记为模块:

"type": "module"

很好,现在你的项目文件夹包含了一个 Node.js 应用程序。

步骤 #2:安装 Playwright Extra

Playwright 的一个已知弱点是它不支持插件。社区通过 Playwright Extra 弥补了这个缺陷,这是一个扩展 playwright 的库,支持插件。

通过以下命令将 playwrightplaywright-extra 添加到你的项目依赖项中:

npm i playwright playwright-extra

这可能需要一段时间,请耐心等待。

步骤 #3:设置你的 Playwright 脚本

是时候初始化你的脚本,让 Playwright 解决 CAPTCHA 挑战了。通过将以下行添加到 script.js 来导入你要控制的浏览器:

import { chromium } from "playwright-extra"

在这种情况下,我们将要在 Chromium 中自动化人类行为。

然后,初始化一个新的 async 函数,在其中使用 Playwright API 执行类似人类的交互:

(async () => {

    // set up the browser and launch it

    const browser = await chromium.launch()

    // open a new blank page

    const page = await browser.newPage()

    // browser automation logic...

    // close the browser and release its resources

    await browser.close()

})()

这将启动一个新的 Chromium 实例并打开一个新的页面,然后关闭浏览器。很好,你已经准备好添加浏览器自动化逻辑了!

步骤 #4:实现浏览器自动化逻辑

目标网站将是 bot.sannysoft.com,这是一个特殊的网页,在浏览器中运行一些测试以确定用户是人类还是机器人。如果你尝试在本地浏览器中访问此页面,你会看到所有测试都通过了。

使用 goto() 方法连接到目标页面:

await page.goto("https://bot.sannysoft.com/")

然后,对整个页面进行截图以查看反机器人测试的结果:

await page.screenshot("results.png")

将所有内容放在一起,你将得到以下 script.js 文件:

import { chromium } from "playwright-extra"

(async () => {

    // set up the browser and launch it

    const browser = await chromium.launch()

    // open a new blank page

    const page = await browser.newPage()

    // navigate to the target page

    await page.goto("https://bot.sannysoft.com/")

    // take a screenshot of the entire page

    await page.screenshot({

        path: "results.png",

        fullPage: true

    })

    // close the browser and release its resources

    await browser.close()

})()

使用以下命令执行上述代码:

node script.js

该脚本将在无头模式下打开一个 Chromium 实例,访问所需页面,截图,然后关闭浏览器。如果你打开脚本执行结束时会出现在项目根文件夹中的 results.png 文件,你会看到:

results.png 文件示例

如你所见,无头模式下的普通 Playwright 未通过几项测试。这就是为什么在使用 Playwright 交互页面时,WAF 会显示 CAPTCHA。解决方案?Stealth 插件!

步骤 #5:安装 Playwright Stealth 插件

Playwright Stealthplaywright-extra 的一个插件,用于防止机器人检测。该插件重写了多个配置,使浏览器实例看起来像是自然的,就好像它没有被 Playwright 控制一样。具体来说,该模块修改了浏览器属性,以防止所有泄露信息暴露浏览器为自动化的。

Stealth 插件最初是为 Puppeteer Extra 开发的,但它也适用于 Playwright Extra。使用以下命令通过 puppeteer-extra-plugin-stealth npm 包安装它:

npm i puppeteer-extra-plugin-stealth

接下来,在 script.js 文件中导入 Stealth 插件:

import StealthPlugin from "puppeteer-extra-plugin-stealth"

步骤 #6:注册 Stealth 设置

要实现 Playwright CAPTCHA 绕过逻辑,只需通过 use() 方法在 playwright-extra 中注册 Stealth 插件:

chromium.use(StealthPlugin())

由 Playwright 控制的浏览器现在将显示为由人类用户使用的真实浏览器。

步骤 #7:重复机器人检测测试

这是你的 script.js 文件目前应如下所示:

import { chromium } from "playwright-extra"

import StealthPlugin from "puppeteer-extra-plugin-stealth"

(async () => {

    // register the Stealth plugin

    chromium.use(StealthPlugin())

    // set up the browser and launch it

    const browser = await chromium.launch()

    // open a new blank page

    const page = await browser.newPage()

    // navigate to the target page

    await page.goto("https://bot.sannysoft.com/")

    // take a screenshot of the entire page

    await page.screenshot({

        path: "results.png",

        fullPage: true

    })

    // close the browser and release its resources

    await browser.close()

})()

再次启动脚本:

node script.js

再次打开 results.png,你将看到所有机器人检测测试都已通过:

results.png 文件第二个示例 - 机器人检测测试通过

瞧!Playwright CAPTCHA 绕过技巧完成了!

如果上述 Playwright CAPTCHA 解决方案不起作用怎么办?

不幸的是,浏览器设置并不是反机器人工具关注的唯一方面。IP 信誉是另一个关键因素,你不能仅仅通过一个免费库来更改你的出口 IP。你需要 Playwright 代理集成

因此,即使你将浏览器配置得最佳,CAPTCHA 仍可能出现。对于只需单击的简单 CAPTCHA,你可以使用 puppeteer-extra-plugin-recaptcha 插件。然而,上一章基于插件的方法仅适用于基本的反机器人措施。面对像 Cloudflare 这样的复杂工具时,你需要更强大的东西。

寻找真正的 Playwright CAPTCHA 解决方案吗?试试 Bright Data 的网络爬虫解决方案吧!

这些解决方案提供卓越的解锁能力,具有专门的 CAPTCHA 解决功能,可以自动处理 reCAPTCHAhCaptchapx_captchaSimpleCaptchaGeeTest CAPTCHAFunCaptchaCloudflare TurnstileAWS WAF CaptchaKeyCAPTCHA 等等。将 Bright Data 的 CAPTCHA Solver 集成到你的脚本中非常容易,因为它适用于任何 HTTP 客户端或浏览器自动化工具。

了解更多关于 如何使用 Bright Data 的 CAPTCHA Solver。还可以查看 文档 以获取所有集成和配置细节。

结论

在本文中,你了解了为什么 CAPTCHA 对 Playwright 是一个挑战以及如何解决它们。使用 Playwright Stealth 库,你可以覆盖默认的浏览器配置,以绕过机器人检测。然而,这种方法可能并不总是足够的。

无论你的 Playwright 脚本多么复杂,先进的机器人检测系统仍然可以将你识别为机器人。解决方案是通过一个可以无缝返回任何网页无 CAPTCHA HTML 的解锁 API 连接到目标页面。

该 API 存在,称为 Web Unlocker。其目标是通过代理集成在每次请求时自动旋转出口 IP,处理浏览器指纹、自动重试和 CAPTCHA 解决,为你解除反机器人措施的烦恼。

现在注册并开始你的免费试用吧。