CAPSOLVER
博客
如何使用 Puppeteer 解决 reCAPTCHA 并提高成功率

如何使用 Puppeteer 解决 reCAPTCHA 并提高成功率

Logo of CapSolver

Emma Foster

Machine Learning Engineer

16-Aug-2024

CAPTCHAs,尤其是 reCAPTCHAs,是网站常用的安全措施,用于区分真人用户和自动化机器人。尽管 CAPTCHAs 在防止滥用方面至关重要,但对于从事网络爬虫或自动化测试的开发者来说,它们可能会成为一大障碍。幸运的是,Puppeteer 等工具结合 CAPTCHA 解决服务,可以有效地绕过这些挑战。今天我们将探讨如何使用 Puppeteer 作为 reCAPTCHA 解决方案,并将其集成到您的工作流程中。

什么是 Puppeteer?

Puppeteer 是一个 Node.js 库,它提供了一个高级 API 用于控制 Chrome 或 Chromium 浏览器。Puppeteer 主要用于自动化测试、抓取网页以及从网页生成 PDF 等任务。Puppeteer 非常适合用于浏览网站、点击按钮,甚至处理复杂的 JavaScript 应用程序。

reCAPTCHA 的挑战

reCAPTCHA 是一种更加复杂的 CAPTCHA,旨在阻止机器人访问网络服务。它通常要求用户识别图像中的对象,或者仅仅点击一个复选框。对于机器人而言,这些任务在没有合适工具的情况下是非常具有挑战性的。

当使用 Puppeteer 进行网络爬虫或自动化时,遇到 reCAPTCHA 可能会阻止整个过程的进行。为继续操作,您需要一种能够以编程方式解决 reCAPTCHA 的方法。

使用 Puppeteer 解决 reCAPTCHA

要使用 Puppeteer 解决 reCAPTCHA,您可以采用多种方法。以下是最有效的几种方法概述:

  1. 手动绕过

这种方法涉及使用 Puppeteer 的交互模式手动解决 CAPTCHA。这种方法适合测试,但对于大规模自动化并不实用。

  1. 第三方 CAPTCHA 解决方案

最有效的以编程方式处理 reCAPTCHA 的方法是使用第三方 CAPTCHA 解决服务,例如 CapSolver。这些服务提供 API,可以为您解决 reCAPTCHA,并返回您可以提交给网站的响应令牌。

  1. 自定义解决方案

对于高级用户,可以使用机器学习模型创建自定义的 reCAPTCHA 解决系统。然而,这需要大量资源和专业知识。

使用第三方 CAPTCHA 解决方案与 Puppeteer 集成

让我们重点介绍如何将第三方 CAPTCHA 解决方案与 Puppeteer 集成。以下是使用 CapSolver 解决 reCAPTCHA的分步指南。

1. 安装所需依赖项:

首先,确保已安装 Puppeteer 和 axios 库,axios 将用于向 CAPTCHA 解决服务发出 HTTP 请求。

bash 复制代码
npm install puppeteer axios

2. 设置 Puppeteer:

启动 Puppeteer 并导航到需要解决 reCAPTCHA 的目标网站。

javascript 复制代码
const puppeteer = require('puppeteer');

async function solveRecaptcha(url) {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto(url);

    // 其他 Puppeteer 逻辑代码
}

solveRecaptcha('https://example.com');

3. 请求 reCAPTCHA 解决方案:

使用 axios 向 CapSolver 的 API 发送请求以解决 reCAPTCHA。

javascript 复制代码
const axios = require('axios');

async function getCaptchaSolution(siteKey, pageUrl, apiKey) {
    const response = await axios.post('https://api.capsolver.com/createTask', {
        clientKey: apiKey,
        task: {
            type: 'ReCaptchaV2Task',
            websiteURL: pageUrl,
            websiteKey: siteKey,
        },
    });

    const taskId = response.data.taskId;
    let solution = '';

    // 轮询以获取解决方案
    while (!solution) {
        const result = await axios.post('https://api.capsolver.com/getTaskResult', {
            clientKey: apiKey,
            taskId: taskId,
        });

        if (result.data.status === 'ready') {
            solution = result.data.solution.gRecaptchaResponse;
        } else {
            await new Promise((resolve) => setTimeout(resolve, 5000)); // 等待5秒钟后重试
        }
    }

    return solution;
}

4. 注入 CAPTCHA 解决方案:

获取解决方案后,将其注入页面并提交表单。

javascript 复制代码
const siteKey = 'SITE_KEY';
const pageUrl = 'https://example.com';
const apiKey = 'YOUR_CAPSOLVER_API_KEY';

const captchaSolution = await getCaptchaSolution(siteKey, pageUrl, apiKey);

await page.evaluate((captchaSolution) => {
    document.querySelector('#g-recaptcha-response').innerHTML = captchaSolution;
    document.querySelector('form').submit();
}, captchaSolution);

5. 完成流程:

关闭浏览器或继续进行下一个自动化步骤。

javascript 复制代码
await browser.close();

高级技术

对于更高级的用例,可以考虑将 Puppeteer 与 undetected-chromedriver 工具结合使用以避免检测,或者使用 Playwright 库作为替代方案。Playwright 提供了与 Puppeteer 类似的功能,但提供了更高级的浏览器自动化功能,包括对多浏览器的支持以及更好地处理动态内容和 CAPTCHA 等网络抓取挑战。

结论

通过 Puppeteer 解决 reCAPTCHA 可以显著简化您的自动化和网络爬虫任务。通过利用 CapSolver 等第三方 CAPTCHA 解决服务,您可以有效绕过这些安全措施。无论您是进行数据抓取还是自动化交互,本指南为您集成 reCAPTCHA 解决方案到您的 Puppeteer 项目中提供了必要的基础。

请记住,务必负责任地使用这些工具,并确保您的活动符合您所交互网站的法律和道德标准。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多