
Emma Foster
Machine Learning Engineer
已发表 Aug 16, 2024
已更新 Aug 16, 2024 · 最小阅读量
CAPTCHAs,尤其是 reCAPTCHAs,是网站常用的安全措施,用于区分真人用户和自动化机器人。尽管 CAPTCHAs 在防止滥用方面至关重要,但对于从事网络爬虫或自动化测试的开发者来说,它们可能会成为一大障碍。幸运的是,Puppeteer 等工具结合 CAPTCHA 解决服务,可以有效地绕过这些挑战。今天我们将探讨如何使用 Puppeteer 作为 reCAPTCHA 解决方案,并将其集成到您的工作流程中。
Puppeteer 是一个 Node.js 库,它提供了一个高级 API 用于控制 Chrome 或 Chromium 浏览器。Puppeteer 主要用于自动化测试、抓取网页以及从网页生成 PDF 等任务。Puppeteer 非常适合用于浏览网站、点击按钮,甚至处理复杂的 JavaScript 应用程序。
reCAPTCHA 是一种更加复杂的 CAPTCHA,旨在阻止机器人访问网络服务。它通常要求用户识别图像中的对象,或者仅仅点击一个复选框。对于机器人而言,这些任务在没有合适工具的情况下是非常具有挑战性的。
当使用 Puppeteer 进行网络爬虫或自动化时,遇到 reCAPTCHA 可能会阻止整个过程的进行。为继续操作,您需要一种能够以编程方式解决 reCAPTCHA 的方法。
要使用 Puppeteer 解决 reCAPTCHA,您可以采用多种方法。以下是最有效的几种方法概述:
这种方法涉及使用 Puppeteer 的交互模式手动解决 CAPTCHA。这种方法适合测试,但对于大规模自动化并不实用。
最有效的以编程方式处理 reCAPTCHA 的方法是使用第三方 CAPTCHA 解决服务,例如 CapSolver。这些服务提供 API,可以为您解决 reCAPTCHA,并返回您可以提交给网站的响应令牌。
对于高级用户,可以使用机器学习模型创建自定义的 reCAPTCHA 解决系统。然而,这需要大量资源和专业知识。
让我们重点介绍如何将第三方 CAPTCHA 解决方案与 Puppeteer 集成。以下是使用 CapSolver 解决 reCAPTCHA的分步指南。
首先,确保已安装 Puppeteer 和 axios 库,axios 将用于向 CAPTCHA 解决服务发出 HTTP 请求。
npm install puppeteer axios
启动 Puppeteer 并导航到需要解决 reCAPTCHA 的目标网站。
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');
使用 axios 向 CapSolver 的 API 发送请求以解决 reCAPTCHA。
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;
}
获取解决方案后,将其注入页面并提交表单。
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);
关闭浏览器或继续进行下一个自动化步骤。
await browser.close();
对于更高级的用例,可以考虑将 Puppeteer 与 undetected-chromedriver 工具结合使用以避免检测,或者使用 Playwright 库作为替代方案。Playwright 提供了与 Puppeteer 类似的功能,但提供了更高级的浏览器自动化功能,包括对多浏览器的支持以及更好地处理动态内容和 CAPTCHA 等网络抓取挑战。
通过 Puppeteer 解决 reCAPTCHA 可以显著简化您的自动化和网络爬虫任务。通过利用 CapSolver 等第三方 CAPTCHA 解决服务,您可以有效绕过这些安全措施。无论您是进行数据抓取还是自动化交互,本指南为您集成 reCAPTCHA 解决方案到您的 Puppeteer 项目中提供了必要的基础。
请记住,务必负责任地使用这些工具,并确保您的活动符合您所交互网站的法律和道德标准。

Emma Foster
Machine Learning Engineer
Where machine learning meets practical AI tooling.
关于作者