如何在 Puppeteer 中使用 2captcha-solver 插件。

426 阅读5分钟

在本文中,我们将描述如何搭配 Puppeteer 使用 2captcha-solver 插件。Puppeteer 是一个节点库,可帮助您启动浏览器并在其中执行各种操作。您可在此处查看使用示例。Puppeteer 库非常适用于各种自动化功能,可用于编写解析器和其他需要在浏览器中实现自动化的任务。Puppeteer 的优势在于其简单性和在 headless 模式下工作的能力。Puppeteer 提供了现成的解决方案,可让您将自动化隐藏在幕后。在开发解析器时对自动化功能进行隐藏非常重要,因为这将允许浏览器看起来更像是真人,从而避免暴露。

在本文中,我们将使用 Puppeteerpuppeteer-extrapuppeteer-extra-plugin-stealthpuppeteer-extraPuppeteer 的一个轻量包,puppeteer-extra-plugin-stealth 则是 puppeteer-extra 的补充功能,其目的是隐藏自动化的痕迹。

在下方的分步描述中,我们将对 cn.2captcha.com/demo/recapt… 页面上的验证码进行解算。

1. 安装组件****

安装 Puppeteer 及其他必要的包:

npm i puppeteer puppeteer-extra puppeteer-extra-plugin-stealth

2. 设置插件****

使用插件下载档案库,然后将其解压缩至项目根目录内的“/2captcha-solver”文件夹中。

此插件提供了多种设置项,包括对指定类型的验证码进行自动解算、代理支持以及更多其他设置。您可在/common/config.js文件中找到所有可用设置。如需添加自动 reCAPTCHA V2 解决方案设置,您需要打开 /common/config.js 文件,并将 autoSolveRecaptchaV2 字段的值改为 true

下一步是对插件进行配置:

  1. 在插件设置文件./common/config.js中输入 API Key。您的 Key 必须写入 apiKey 字段。可在本页复制 API Key。

示例:apiKey: "8080629c1221fdd82m8080000ff0c99c"

  1. 禁用安装后打开扩展设置页面。可在./manifest.json”删除以下行以实现该功能:
"options_ui": {
"page": "options/options.html",
"open_in_tab": true
},

3. 浏览器自动化****

在 Puppeteer 中启动并初始化插件:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
(async () => {
const pathToExtension = require('path').join(__dirname, '2captcha-solver');
puppeteer.use(StealthPlugin())
const browser = await puppeteer.launch({
headless: false,
args: [
`--disable-extensions-except=${pathToExtension}`,
`--load-extension=${pathToExtension}`,
],
});
const [page] = await browser.pages()
});

3.1 打开页面****

打开页面 cn.2captcha.com/demo/recapt… 并发送验证码。

我们可以使用 page.goto() 前往页面 cn.2captcha.com/demo/recapt…。接下来是发送验证码以进行解算,这一步骤可手动进行,也可自动完成。

在我们的示例中将手动发送验证码,为此我们将等待带有 CSS 选择器.captcha-solver的插件按钮处于可用状态,然后再点击此按钮。点击按钮后,验证码将被发送至服务进行解算。

// 打开页面
await page.goto('https://2captcha.com/demo/recaptcha-v2')
// 等待带有 CSS 选择器“.captcha-solver”的元素处于可用状态
await page.waitForSelector('.captcha-solver')
// 点击带有特定选择器的元素
await page.click('.captcha-solver')

3.2 检查验证码状态****

在从服务接收到相应之后,插件按钮.captcha-solver会对数据属性data-state的值进行更改。通过观察data-state属性的值,我们可对插件的状况进行监测。在完成验证码的解算之后,该属性的值将被更改为solved

“data-state”属性值说明:

属性****说明****
data-state="ready"插件已做好对验证码进行解算的准备。如需发送验证码,请点击按钮。
data-state="solving"正在解算验证码。
data-state="solved"验证码已成功解算
data-state="error"接收响应时出错或验证码未能成功得到解算。

在这一步骤中,您需要等待验证码完成解算,然后属性值或被更改为solved。这就表明验证码的解算工作已成功完成。您可在这一步骤中进行必要操作。

// 默认情况下 waitForSelector 会等待 30 秒时间,但这点时间通常是不够的,所以我们会使用第二个参数来指定超时值。超时值需要以“ms”为单位进行声明。
await page.waitForSelector(`.captcha-solver[data-state="solved"]`, {timeout: 180000})

4. 进行操作****

在完成验证码的解算工作后,我们就可在页面上执行必要的操作了。本示例中将点击“Check”按钮以检查收到的验证码解算结果的正确性。成功通过检查后,您将看到“验证码已成功通过!”的消息。

// 点击“Check”按钮以检查验证码解算是否成功。
await page.click("button[type='submit']")

祝贺,现在已成功通过了验证码验证!示例的完整代码可在此处查看。

实用信息:****

  • 本插件提供了许多设置,例如:自动对指定类型的验证码进行解算、代理支持等。这些设置都可在/common/config.js中进行使用,其位于已解压插件的文件夹中。如需自动发送 reCAPTCHA V2,可在/common/config.js文件中将 autoSolveRecaptchaV2 字段的值设置为 true
  • 您可使用沙盒模式以进行测试。在沙盒模式中,已发送的验证码将被发送给您。您可阅读此处的信息以进一步了解有关沙盒的内容。
  • 运行于 headless 模式的 Puppeteer 将不支持对插件进行加载。您可使用 xvfb 来解决此问题。

实用链接:****