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

news/2024/9/18 22:51:45/ 标签: php, 开发语言

您是否在抓取数据时遇到 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/news/1519376.html

相关文章

瑞芯微RK3566开发板USB OTG模式介绍及命令切换,触觉智能EVB3566主板鸿蒙硬件厂商

一、USB OTG的模式 host模式&#xff08;下行&#xff09;&#xff1a;为u盘等设备供电&#xff0c;不可以进行调试&#xff0c;连接adb或者烧录等操作。 device模式&#xff08;上行&#xff09;&#xff1a;可以进行调试&#xff0c;连接adb或者烧录等操作&#xff0c;即US…

基于xr-frame实现微信小程序的人脸识别3D模型叠加AR功能(含源码)

前言 xr-frame是一套小程序官方提供的XR/3D应用解决方案&#xff0c;基于混合方案实现&#xff0c;性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。xr-frame在基础库v2.32.0开始基本稳定&#xff0c;发布为正式版&#xff0c;但仍有一些功能还在开发&#…

商圣集团:数字创新,引领智慧生活新篇章

在全球化经济不断演进的大潮中&#xff0c;数字经济已成为推动社会进步的关键引擎&#xff0c;重塑着我们的生产与生活模式。商圣集团&#xff0c;以服务社会、创新驱动为核心价值观&#xff0c;致力于利用数字化技术&#xff0c;为个人和企业带来高效、便捷的服务体验&#xf…

OpenCV绘图函数(7)从一个椭圆定义中提取出多边形的顶点坐标函数ellipse2Poly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 近似一个椭圆弧为一个多边形线。 函数 ellipse2Poly 计算近似指定椭圆弧的多边形线的顶点。它被 ellipse 函数所使用。如果 arcStart 大于 arcEn…

自学数据结构的网站

自学数据结构的网站有很多&#xff0c;以下是一些推荐的高质量和受欢迎的网站&#xff1a; LeetCode 描述&#xff1a;LeetCode是一个知名的在线编程训练平台&#xff0c;特别适合算法和数据结构的学习与练习。它提供了大量的编程题目&#xff0c;涵盖了从简单到困难的各个难度…

基于YOLO的车牌检测识别(YOLO+Transformer)

概述&#xff1a; 基于深度学习的车牌识别&#xff0c;其中&#xff0c;车辆检测网络直接使用YOLO侦测。而后&#xff0c;才是使用网络侦测车牌与识别车牌号。 车牌的侦测网络&#xff0c;采用的是resnet18&#xff0c;网络输出检测边框的仿射变换矩阵&#xff0c;可检测任意形…

「bug」nvitop ERROR: Failed to initialize curses

nvitop 作为一个优秀个 Nvidia显卡查询库&#xff0c;简单易用且显示信息十分丰富&#xff0c;相比 Nvidia-smi 更方便&#xff0c;简直是每个 开发人员必备的库&#xff0c;安装也十分方便&#xff0c;直接采用 pip install nvitop 即可&#xff0c;调用的时候也是直接在 Term…

【Python报错已解决】“ModuleNotFoundError: No module named ‘timm‘”

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述1.1 报错示例&#xff1a;当我们尝试导入timm库时&#xff0c;可能会看到以下错误信息。…

k8s sa

在Kubernetes&#xff08;K8S&#xff09;中&#xff0c;SA是Service Account&#xff08;服务账户&#xff09;的简称。Service Account是Kubernetes集群中的一种资源对象&#xff0c;用于识别和验证Pod访问集群中其他资源的身份。以下是关于K8S SA的详细解释&#xff1a; 一、…

JavaScript中将style的String类型转换成Object类型

在React开发中&#xff0c;我们或许经常遇到要将font-size:20px;转换成对象类型{fontSize:"20px"},如下我自己写了个类&#xff0c;正则匹配-后面的第一个字为大写字母&#xff0c;并且去掉-,然后将:后的属性转换为字符串类型&#xff0c;代码如下 function styleSt…

GitLab 是什么?GitLab使用常见问题解答

GitLab 是什么 GitLab是由GitLab Inc.开发&#xff0c;使用MIT许可证的基于网络的Git仓库管理工具开源项目&#xff0c;且具有wiki和issue跟踪功能&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。 ​GitLab 是由 GitLab Inc.开发&#xff0c…

k3s安装部署说明

前言: 为什么不是k8s&#xff0c;k8s机子要求资源太高了&#xff0c;先来个简单的k3s 1:环境 ubuntu18 2安装docker ubuntu18.0.4 如下 1:禁用防火墙及SELinux(可能需要禁止) systemctl stop firewalld && systemctl disable firewalld 2: 开启路由转发 sudo vim /e…

微信小程序:自定义扫码功能

我们今天主要是介绍小程序自定义扫码的应用&#xff0c;相关业务处理可以根据自己需求来填补 WXML&#xff1a; <view class"scan-box direction-column" wx:if"{{ showCanScan }}"><camera class"camera" resolution"high"…

摄像头的ISP和SOC的GPU有区别吗?

摄像头的主芯片必须包含ISP&#xff0c;也就是图像处理器核心。而SOC的GPU或者说显卡也包含图像处理器也就是GPU。两者并无本质区别&#xff0c;都是实现数字图像处理算法。同样的用FPGA做内窥镜图像处理和用FPGA做显示图像处理器本质上也是一样的。 当然两者存在一些细微差别…

【BLE】四.SMP安全配对详解

设备配对流程 SMP专业术语 Paring&#xff08;配对&#xff09;&#xff1a; 配对能力交换&#xff0c;设备认证&#xff0c;密钥生成&#xff0c;连接加密以及机密信息分发等 过程 Bonding&#xff08;绑定&#xff09; 配对中会生成一个长期密钥&#xff08;LTK&#xff0c;…

灾难性遗忘问题(Catastrophic Forgetting,CF)是什么?

灾难性遗忘问题&#xff08;Catastrophic Forgetting&#xff0c;CF&#xff09;是什么&#xff1f; 在深度学习和人工智能领域中&#xff0c;“灾难性遗忘”&#xff08;Catastrophic Forgetting&#xff09;是指当神经网络在增量学习&#xff08;Incremental Learning&#…

使用 Milvus Lite、Llama3 和 LlamaIndex 搭建 RAG 应用

大语言模型&#xff08;LLM&#xff09;已经展示出与人类交互并生成文本响应的卓越能力。这些模型可以执行各种自然语言任务&#xff0c;如翻译、概括、代码生成和信息检索等。 为完成这些任务&#xff0c;LLM 需要基于海量数据进行预训练。在这个过程中&#xff0c;LLM 基于给…

ComfyUI:基于差分扩散的像素级图像修改

在几个月的沉寂之后&#xff0c;差分扩散&#xff08;Differential Diffusion&#xff09;被引入了。 玩了几天之后&#xff0c;我仍然对结果感到震惊。 这种新的先进方法允许以像素为基础进行更改&#xff0c;而不是以整个区域为基础进行更改。 另一种可能更通俗的说法&…

Git 基础使用--权限管理--用户和用户组授权

&#x1f600;前言 本篇博文是关于Git 基础使用–权限管理–用户和用户组授权&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满…

SparkSQL缓存的用法

前言 SparkSQL关于缓存的操作语句官方给了三种: CACHE TABLE(缓存表)UNCACHE TABLE(清除指定缓存表)CLEAR CACHE(清除所有缓存表)下面我们详细讲解这些语句的使用方法。 CACHE TABLE CACHE TABLE 语句使用给定的存储级别缓存表的内容或查询的输出。如果一个查询被缓存…