使用 Puppeteer 在 PHP 中解决 reCAPTCHA 以进行网页抓取

ops/2024/9/25 21:30:25/

您是否在抓取数据时遇到 reCAPTCHA 障碍?我也遇到过。这些 CAPTCHA 挑战会将简单的抓取任务变成一大障碍。但别担心,我有一个解决方案可以帮助您轻松绕过这些障碍。

在本博文中,我将引导您使用 Puppeteer(一个功能强大的 Node.js 库)来应对 reCAPTCHA 挑战。然后,我们将将其与 PHP 集成,使您的网页抓取任务更加顺畅和高效。准备好在 reCAPTCHA 上大显身手,并无缝获取您的数据了吗?让我们开始吧!

网页抓取时什么是 reCAPTCHA?

为了让您了解一些背景信息,reCAPTCHA 是一种旨在保护网站免遭自动化滥用的系统。它要求用户完成对人类来说很容易但对机器人来说很困难的任务,例如识别图像中的物体或选中一个框。虽然这些挑战对于安全来说非常有用,但它们对于网页抓取来说却很麻烦。以下是您可能会遇到的基本类型:

  • reCAPTCHA v2:此版本以“我不是机器人”复选框和基于图像的挑战而闻名。用户可能需要点击图像或完成特定操作来证明他们不是机器人。它在区分真实用户和机器人方面非常有效。

  • reCAPTCHA v3:此版本在后台运行。它不直接要求用户交互,而是分析用户在整个网站上的行为,并分配一个风险评分。该评分帮助网站根据用户是机器人的可能性来决定是否授予或阻止访问权限。

reCAPTCHA Enterprise: 针对安全要求更高的企业,reCAPTCHA Enterprise 提供高级保护,抵御复杂的威胁。它包含增强风险分析、可自定义评分和改进可扩展性等功能,使其适合处理敏感信息或关键操作的组织。

难以解决烦人的验证码,并不断失败?

使用 Capsolver 的 AI 驱动的自动网页解锁技术,体验无缝自动验证码解决!

领取您的 奖励代码 以获得顶级验证码解决方案;CapSolver: WEBS。 兑换后,每次充值后您将获得额外 5% 的奖励,无限次

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

了解这些版本将帮助我们有效应对 reCAPTCHA 的挑战。让我们深入了解如何使用 Puppeteer 和 CapSolver 来应对这些挑战并简化我们的网页抓取工作。

CapSolver 如何帮助解决 reCAPTCHA

CapSolver 是一个强大的解决方案,用于处理包括 reCAPTCHA 在内的 CAPTCHA 挑战。以下是如何将 CapSolver 集成到您的工作流程中,以简化 CAPTCHA 解决:

  1. 检索网站密钥
    • 在浏览器请求日志中搜索类似 /recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf 的请求。k= 参数是您需要的网站密钥。
    • 如果您提供错误的密钥,您将收到类似以下的错误消息:
      Solve failed! response: {"errorId":1,"errorCode":"ERROR_INVALID_TASK_DATA","errorDescription":"Invalid site key","taskId":"1cd1e687-96dd-4f14-b8ef-18b5d144d9b8","status":"failed"}
      
  • 如果您使用的是错误的 reCAPTCHA 版本(V2 或 V3),或者目标网站类型与 API 请求类型不匹配,您可能会看到:
    Solve failed! response: {"errorId":1,"errorCode":"ERROR_CAPTCHA_SOLVE_FAILED","errorDescription":"Failed to solve the captcha: 1001","taskId":"da450cbc-ff9d-439d-908a-77e7eb8852dd","status":"failed"}
    
  1. 设置您的环境

    • 安装必要的包:
      npm install axios puppeteer-core
      
  2. 编写集成代码

php"><?phprequire_once 'vendor/autoload.php';
use Nesk\Puphpeteer\Puppeteer;
use Nesk\Rialto\Data\JsFunction;
use GuzzleHttp\Client;$puppeteer = new Puppeteer;
$browser = $puppeteer->launch();// TODO: 设置您的配置
$api_key = "YOUR_API_KEY"; // 您的 CapSolver API 密钥
$site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"; // 目标网站的站点密钥
$site_url = "https://www.google.com/recaptcha/api2/demo"; // 目标网站的页面 URLfunction capsolver()
{global $api_key, $site_key, $site_url;$client = new Client();$payload = ['clientKey' => $api_key,'task' => ['type' => 'ReCaptchaV2TaskProxyLess','websiteKey' => $site_key,'websiteURL' => $site_url,]];try {$response = $client->post("https://api.capsolver.com/createTask", ['json' => $payload]);$data = json_decode($response->getBody(), true);$task_id = $data['taskId'] ?? null;if (!$task_id) {echo "创建任务失败:" . json_encode($data) . PHP_EOL;return null;}echo "获取到 taskId:" . $task_id . PHP_EOL;while (true) {sleep(1);$getResultPayload = ['clientKey' => $api_key,'taskId' => $task_id];$resp = $client->post("https://api.capsolver.com/getTaskResult", [
php"><?phpfunction capsolver()
{try {$client = new GuzzleHttp\Client();$resp = $client->post('https://api.capsolver.com/createTask', ['json' => $getResultPayload]);$data = json_decode($resp->getBody(), true);$status = $data['status'] ?? null;if ($status === "ready") {return $data['solution']['gRecaptchaResponse'];}if ($status === "failed" || isset($data['errorId'])) {echo "Solve failed! response: " . json_encode($data) . PHP_EOL;return null;}} catch (\Exception $e) {echo "Error: " . $e->getMessage() . PHP_EOL;return null;}
}function reqSite()
{global $site_url, $browser;$token = capsolver();if ($token === null) {return;}echo $token . PHP_EOL;$page = $browser->newPage();$page->goto($site_url);$evaluate_script = <<<EODdocument.getElementById("g-recaptcha-response").value="$token";onSuccess("$token");EOD;$page->evaluate(JsFunction::createWithBody($evaluate_script));$product_element = $page->querySelector('#recaptcha-demo-submit');if ($product_element instanceof ElementHandle) {$product_element->click();} else {echo 'Element not found.' . PHP_EOL;}
}reqSite();

无论您是在处理 reCAPTCHA v2、v3 还是 Enterprise,将 CapSolver 与 Puppeteer 集成都可以简化您的工作流程并提高您的抓取效率。如果您遇到任何问题或需要进一步的帮助,CapSolver 和 Puppeteer 都提供全面的文档和支持,以帮助您克服任何挑战。


http://www.ppmy.cn/ops/102359.html

相关文章

zookeeper客户端命令行操作、节点类型及监听器

zookeeper客户端命令行操作、节点类型及监听器 文档 linux安装java -centos安装java -linux配置java环境变量zookeeper单机安装zookeeper集群安装zookeeper客户端命令行操作、节点类型及监听器zookeeper集群写数据原理java操作zookeeper 启动zookeeper客户端 启动客户端&…

无线通信频率分配

首先看看无线电信号的频谱如何划分&#xff1a; 一、5G NR 3GPP已指定5G NR 支持的频段列表&#xff0c;5G NR频谱范围可达100GHz&#xff0c;指定了两大频率范围&#xff1a; ① Frequency range 1 &#xff08;FR1&#xff09;&#xff1a;就是我们通常讲的6GHz以下频段 频率…

【neo4j】neo4j-Desktop安装

Neo4j是一个高性能的图数据库&#xff0c;它使用图形结构来存储和处理数据。它是一个开源的、完全事务的数据库&#xff0c;专门设计用于大规模的图形数据。Neo4j使用一种名为Cypher的查询语言来处理图形数据&#xff0c;使用户能够方便地进行复杂的图形查询和分析。 Neo4j的主…

hadoop生态圈(四)- MapReduce

目录 MapReduce的基本原理 MapReduce流程图 Map阶段执行流程 Reduce阶段执行流程 Shuffle机制 MapReduce解决的是海量数据计算 MapReduce的思想核心是“分而治之”。就是把一个复杂的问题按一定的“分解”方法分为规模较小的若干部分&#xff0c;然后逐个解决&#xff0c;…

【视频讲解】SMOTEBoost、RBBoost和RUSBoost不平衡数据集的集成分类酵母数据集、治癌候选药物|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p37502 分析师&#xff1a;Zilin Wu 在当今的大数据时代&#xff0c;科研和实际应用中常常面临着海量数据的处理挑战。在本项目中&#xff0c;我们拥有上万条数据&#xff0c;这既是宝贵的资源&#xff0c;也带来了诸多难题。一方面&a…

window下kafka3启动多个

准备工作 我们先安装好kafka&#xff0c;并保证启动成功&#xff0c;可参考文章Windows下安装Kafka3-CSDN博客 复制kafka安装文件 kafka3已经内置了zookeeper&#xff0c;所以直接复制就行了 修改zookeeper配置文件 这里我们修改zookeeper配置文件&#xff0c;主要是快照地址…

.NET_web前端框架_layui_栅格布局

基础概念 layui:用于简化前端编写的框架。响应式布局&#xff08;Responsive Layout&#xff09;:一种网页设计方法&#xff0c;使网页能够根据不同设备的屏幕尺寸和分辨率自动调整其内容和布局。栅格布局&#xff08;Grid Layout&#xff09;:一种网页设计布局方法&#xff0c…

Android 消息机制Handler完全解析(一)

提到Handler相信即使你是刚入行的android开发也会用过&#xff0c;可能你会觉得很简单&#xff0c;但是Handler中包含的内容真的不是你理解的那么简单&#xff0c;可能有些工作3-5年的同学也没有对其有很深入的了解。但Handler在android中的地位非常重要&#xff0c;并且几乎是…