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

news2024/11/15 10:23:19

您是否在抓取数据时遇到 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

require_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"; // 目标网站的页面 URL

function 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

function 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 = <<<EOD
        document.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.coloradmin.cn/o/2082205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式&#xff1a;在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…

如何使用ssm实现毕业生交流学习平台+vue

TOC ssm306毕业生交流学习平台vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0c;也让时间变得…

某系统任意用户创建漏洞

初来人间不知苦&#xff0c;潦倒半生一身无&#xff0c;转身回望来时路&#xff0c;方知生时为何哭。 漏洞描述 某系统存在任意用户创建漏洞&#xff0c;发送特定的请求包攻击者可以创建管理员账户登录后台 漏洞实战 出现漏洞的文件为 userproce.php&#xff0c;出现漏洞的…

汽车免拆诊断案例 | 马自达CX-3无音频输出

故障现象&#xff1a; 使用触摸屏打开收音机时&#xff0c;单选按钮打开收音机&#xff0c;但无法访问菜单。使用中控台中的旋转控制旋钮时&#xff0c;也会遇到相同的情况。 没有音频输出到车上的任何扬声器&#xff0c;包括卫星导航、蓝牙或语音识别。音量调节也不起作用&a…

食家巷大烤馍,美味超实在

在美食的世界里&#xff0c;总有一些味道能勾起我们内心深处的温暖回忆&#xff0c;食家巷大烤馍便是其中之一。 每一个食家巷大烤馍都是匠心的结晶。首先&#xff0c;精选优质的面粉&#xff0c;确保了烤馍的基础品质。这些面粉经过严格的筛选&#xff0c;颗粒细腻&#xff0c…

2024/8/28 英语每日一段

“Its great were getting these investments, but you actually cant materialize the benefits of these investments if the cities actually cant afford to run it,” he said. All of the eight cities say the planned expansions, such as new light rail lines in Ott…

掌握高效管理技巧:9款顶级待办事项软件

本文将介绍9款优质待办事项清单工具&#xff1a;1.PingCode&#xff1b;2.Worktile&#xff1b;3.滴答清单 (TickTick)&#xff1b;4.日事清&#xff1b;5.效能工作任务&#xff1b;6.印象笔记&#xff1b;7.MyLifeOrganized&#xff1b;8.Quire&#xff1b;9.OmniFocus。 在当…

CTFhub通关攻略-SSRF篇【1-5关】

01关 内网访问 根据题意&#xff0c;它让我们去尝试访问127.0.0.1的flag.php&#xff0c;我们点进题目链接 有一个url参数可以进行输入&#xff0c;我们直接访问127.0.0.1的flag.php 这样就得到了flag 02 伪协议读取文件 点开题目链接发现有一个url的参数可以进行填写 题中说让…

【贪心 决策包容性 】757. 设置交集大小至少为2

本文涉及知识点 贪心 决策包容性 LeetCode757. 设置交集大小至少为2 给你一个二维整数数组 intervals &#xff0c;其中 intervals[i] [starti, endi] 表示从 starti 到 endi 的所有整数&#xff0c;包括 starti 和 endi 。 包含集合 是一个名为 nums 的数组&#xff0c;并…

redis核心数据结构源码分析

dictEntry和redisObject 在 Redis 的实现中&#xff0c;当一个键值对被创建并存储时&#xff0c;键通常是一个字符串&#xff0c;而值则是一个 redisObject。因此&#xff0c;在 dictEntry 结构中&#xff0c;key 成员指向的是一个字符串&#xff0c;而 v.val 成员则指向一个 …

《深入理解JAVA虚拟机(第2版)》- 第2章 - 学习笔记

第二章 Java内存区域与内存溢出异常 2.1 概述 JVM是自动内存管理 2.2 运行时数据区 所谓运行时数据区是JVM在运行Java程序的时候将所管理的内存划分为几块不同的数据区域&#xff0c;分为&#xff1a;程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区&#xff0c;如下…

樊振东代言LV旗下品牌,媒介易解读冠军代言背后的商业逻辑

​近日&#xff0c;法国奢侈品巨头LVMH旗下的德国知名拉杆箱品牌RIMOWA宣布&#xff0c;中国乒乓球奥运冠军樊振东成为其品牌挚友。这一合作不仅是RIMOWA对樊振东在巴黎奥运会上出色表现的认可&#xff0c;也标志着品牌与体育冠军联手打造品牌形象的趋势日益显著。 樊振东&…

Moco求解最优化问题使用教程

理论部分 最简单的例子&#xff0c;流程 输出结果分析 理论部分 moco最终是调用CasAdi求解器来进行求解 对不常见的几个符号表达式含义进行解释&#xff1a; 多刚体动力学公式代表系统中&#xff0c;f_inertial (惯性力和科里奥利力)&#xff1b;f_app (外力和接触力)&…

SQL注入-ctfshow

首先还是对sql的具体分析和讲解 原理&#xff1a; SQL注入是一种安全漏洞&#xff0c;它允许攻击者通过在应用程序的输入中插入或者操作SQL命令来改变后端数据库的查询和操作。SQL注入的主要原因是代码中直接将用户输入与SQL命令拼接在一起&#xff0c;没有进行适当的验证或清…

网络安全可以从事哪些岗位岗位职责是什么网络安全专业的就业前景

网络安全可以从事哪些岗位 伴随着社会的发展&#xff0c;网络安全被列为国家安全战略的一部分&#xff0c;因此越来越多的行业开始迫切需要网安人员&#xff0c;也有不少人转行学习网络安全。那么网络安全可以从事哪些岗位?岗位职责是什么?相信很多人都不太了解&#xff0c;…

『功能项目』着色器光透魔法球Shaders【09】

我们打开上一篇08技能释放的项目&#xff0c; 本章要做的事情是为魔法球增添一个光透效果shaders。 首先在Assets中创建一个Shaders文件夹 接着将场景中的灯光调暗一些&#xff08;避免灯光太强压过将要设置半透明光透效果的魔法球&#xff09; 将新Resources中的Shpere拖拽至…

MQTT服务器-mosquitto配置

我们要使用ESP8266使得STM32能够和服务器之间传递数据&#xff0c;需要有一台MQTT服务器。当然读者可以使用腾讯云、阿里云、OneNet等平台提供的MQTT服务更方便一些。 逻辑是这样的&#xff1a;我们首先需要一台服务器A作为中转站&#xff0c;然后我们的STM32作为客户端能够发…

Java接口中的长连接与短连接详解:概念、应用场景及实现

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

2024年十款好用的图纸加密软件推荐|有效的图纸加密方法分享

在数字化时代&#xff0c;图纸作为企业的重要资产&#xff0c;其安全性显得尤为重要。随着技术的不断进步&#xff0c;市场上涌现出多款优秀的图纸加密软件&#xff0c;为企业和个人提供了强有力的安全保障。本文将为您推荐2024年十款好用的图纸加密软件。 1.安秉图纸加密软件…

JavaSE 面试题 46-50

使用runnable需重写run方法&#xff0c;而且返回值为viod型&#xff0c;等于没有返回值&#xff1b; Thread 类在调用 start()函数后就是执行的 是 Runnable 的 run()函数。 callable需重写call方法&#xff0c;call方法可以有返回值&#xff0c;支持泛型而且可以捕获解决异常&…