如何解决 Cloudflare | 使用 Puppeteer 和 Node.JS

news2024/11/15 14:00:06

我认为,现在自动化任务越多,越能体现它们的价值,因此挑战也变得更加明显和困难。例如,Cloudflare 目前提供了强有力的安全措施来保护网站免受所有形式的自动化工具的侵扰。

但对于从事自动化项目(如网络爬虫、数据提取或测试)的开发人员和组织来说,导航这些安全功能可能是一项挑战。然而,通过合适的工具和策略,您可以在遵守法律和道德标准的前提下,有效应对这些挑战。

因此,在本教程中,我将探讨如何使用 Puppeteer 和 Node.js 以及 Captcha 解码器有效地解决像 Cloudflare Turnstile 这样的挑战。

奖励码

领取您的 奖励码,获取顶级验证码解决方案:CapSolver: WEBS。兑换后,每次充值您将额外获得 5% 的奖励,无限次数
在这里插入图片描述

了解 Cloudflare 的 Turnstile

Cloudflare 的 Turnstile 是一项复杂的安全功能,旨在挑战试图访问受保护网站的用户。它采用包括JavaScript 挑战、验证码和行为分析在内的多种技术,以评估用户是合法的人类还是自动化的机器人。对于开发人员来说,这意味着绕过 Turnstile 不仅仅需要传统的网络爬虫技术。

前提条件

在深入实施之前,请确保您拥有以下工具和资源:

  • Node.js: 从官方网站安装最新版本的 Node.js。
  • Puppeteer: 一个 Node.js 库,提供了用于控制无头 Chrome 或 Chromium 的高级 API,适用于自动化任务。
  • CapSolver API 密钥: 注册 CapSolver 并获取用于解决验证码服务的 API 密钥。

什么是 CapSolver?

CapSolver 是一款旨在协助解决验证码和其他自动化挑战的强大工具。随着网站越来越多地部署复杂的安全机制来阻止机器人和爬虫,CapSolver 提供了克服这些障碍的可靠解决方案。

CapSolver 的关键功能:
  • 全面的验证码解决方案: CapSolver 支持多种类型的验证码,包括 reCAPTCHA、hCaptcha、Cloudflare、ImageToText 等,使挑战解决变得更加顺畅。
  • 高精度: CapSolver 利用先进的算法和机器学习模型,确保高精度解决验证码,降低失败率,提高效率。
  • 易于集成: CapSolver 提供用户友好的 API,可以轻松与现有的自动化工具(包括 Puppeteer)集成,使您能够将验证码解决自动化作为网络爬虫或测试工作流程的一部分。
  • 24/7 支持: CapSolver 提供强大的客户支持,帮助解决任何问题或疑问,确保操作顺利进行并及时提供帮助。

详细的实现步骤

  1. 使用 Puppeteer 和 JavaScript 调用 CapSolver API 并访问网站

    • Puppeteer 是一个功能强大的 Node.js 库,可用于通过 DevTools 协议控制无头 Chrome 或 Chromium。在本教程中,它被用来导航网页和处理复杂的交互,如处理验证码。
  2. 获取 Turnstile 的 SiteKey

    • SiteKey 是解决 Turnstile 挑战所需的关键元素。这个密钥对每个网站都是唯一的,必须用于与验证码解决 API 交互。您可以通过分析网站的 HTML 来提取 SiteKey,或者使用类似 CapSolver 扩展 的工具来简化流程。有关如何识别所需参数的详细指南,请参考我们专门的博客文章。
  3. 使用 JavaScript 调用 CapSolver API 并获取 Token

    • 获取 SiteKey 后,您可以向 CapSolver API 发出请求。这包括创建一个任务,CapSolver 将处理此任务以解决验证码。API 将返回一个 Token,您可以用它来绕过 Turnstile 保护。
    • 以下是使用 JavaScript 与 CapSolver API 交互的示例:
// npm install axios puppeteer-core
const axios = require('axios');
const puppeteer = require("puppeteer-core");

const api_key = "YOUR_API_KEY";
const site_key = "0xxxxxx";
const site_url = "https://xxx.xxx.xxx/xxx";
const proxy = "http://xxx:xxx@x.x.x.x:x"

async function capsolver() {
  const payload = {
    clientKey: api_key,
    task: {
      type: 'AntiTurnstileTaskProxyLess',
      websiteKey: site_key,
      websiteURL: site_url,
      metadata: {
          action: '',  // optional,
          type: "turnstile"
      },
      // proxy: proxy
    }
  };

  try {
    const res = await axios.post("https://api.capsolver.com/createTask", payload);
    const task_id = res.data.taskId;
    if (!task_id) {
      console.log("创建任务失败:", res.data);
      return;
    }
    console.log("获取 taskId:", task_id);

    while (true) {
      await new Promise(resolve => setTimeout(resolve, 1000)); // 延迟1秒

      const getResultPayload = {clientKey: api_key, taskId: task_id};
      const resp = await axios.post("https://api.capsolver.com/getTaskResult", getResultPayload);
      const status = resp.data.status;

      if (status === "ready") {
        return resp.data.solution.token;
      }
      if (status === "failed" || resp.data.errorId) {
        console.log("解决失败! 响应:", resp.data);
        return;
      }
    }
  } catch (error) {
    console.error("错误:", error);
  }
}

const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
async function reqSite(){
  let coockie;
  await capsolver().then(token => {
    console.log(token);
    coockie = token;
  });

  const browser = await puppeteer.launch({
    headless: false,
    executablePath: "浏览器路径"
  });

  const page = await browser.newPage();
  await wait(500);
  await page.setCookie({
    name: "cf_clearance",
    value: coockie,
    domain: "xx.xx.xx"
  });
  await wait(500);
  await page.goto(site_url);
  // TODO
  await page.close();
  await browser.disconnect();
}

reqSite().then();
  1. 使用 Puppeteer 设置 Cookie 并访问页面内容
    • 通过 CapSolver 获得的 Token,您现在可以在 Puppeteer 中设置适当的 Cookie,以通过 Cloudflare 的挑战。此步骤至关重要,因为它允许您访问网站上的受保护内容。

结论

在本教程中,我们探讨了如何使用 Puppeteer 和 CapSolver API 有效应对 Cloudflare 的 Turnstile 安全措施。通过理解 Cloudflare 保护措施的复杂性,并利用像 CapSolver 这样强大的工具,开发人员可以在不违反法律规定的前提下,成功地自动化网络爬虫、数据提取和测试等任务。

自动化在各行各业的重要性不断增加,与之而来的挑战也更加显著,比如 Turnstile 这样的高级安全系统。通过保持信息更新并利用正确的策略,您可以确保您的自动化项目顺利高效地进行。

如果您正在从事类似的项目,不妨探索一下 CapSolver 提供的强大验证码解决方案。有关更多见解,请务必查看相关主题,如网络爬虫最佳实践 和 Puppeteer 使用技巧。

CapsolverCN官 方代理交流扣 群:497493756

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2074554.html

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

相关文章

STM32(七):定时器——输入捕获

IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。 每个高级定时器和通用定时器都拥有4个输…

基于vscode安装EPS-IDF环境与创建例程

安装ESP-IDF 在vscode中安装esp-idf插件 然后打开插件,左侧选择Configure ESP-IDF Extension ![![[Pasted image 20240821221256.png]](https://i-blog.csdnimg.cn/direct/3993e22c37644097b464aef0bbc244a5.png) 点击安装 自动下载ESP-IDF 安装完成&#xff01…

计算机毕业设计推荐- 基于Python的高校岗位招聘数据分析平台

💖🔥作者主页:毕设木哥 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 实战项目 文章目录 实战项目 一、基于Python的高校岗位招聘分…

Gitee的使用方法

是跟着这位up的视频学习的,老师讲的很好 https://www.bilibili.com/video/BV1hf4y1W7yT/share_sourcecopy_web&vd_source985ed259d2e2be1d81c218c58be165b9 需要的安装包我学习完成后,会放到我的gitee仓库里,也当作是练习一下。 insta…

PriorMapNet:Enhancing Online Vectorized HD Map Construction with Priors

参考代码:None 动机与出发点 训练场景中的车道线千变万化会导致query方式预测方式变得较难收敛或者性能较低,之前的一些工作有将mask信息引入到pipeline中为query提供instance-level的语义信息,但是对于point-level信息就需要自己去学习了。…

动态规划:从记忆化搜索到递推 打家劫舍

目录 LeetCode198 打家劫舍 1、递归搜索保存计算结果记忆化搜索 2、1:1翻译成递推 3、空间优化 LeetCode213 打家劫舍II LeetCode198 打家劫舍 1、递归搜索保存计算结果记忆化搜索 回溯三问: (1)当前操作?枚举第i个房子选/不…

计算机的错误计算(七十三)

摘要 计算机的错误计算(七十二)探讨了大数的余割函数的错误计算 。本节讨论另外一类数值: 附近数 的余割函数的计算精度问题。 例1. 已知 计算 csc(x) . 若在 Excel 中计算,则有 若用Java 编程实现 , 即有下列代码&#x…

认知杂谈26

今天分享 有人说的一段争议性的话 I I 上班的双刃剑:安稳与束缚的较量 上班这事儿啊,好多人都觉得那就是稳定的代表。每天按时去打卡,每个月都能稳稳地拿到工资,听起来好像挺美的,就跟理想生活似的。但咱要是仔细琢…

UE管理内容 —— FBX Asset Metadata Pipeline

随着实时3D制作大小和复杂程度的增加,以及构成现代制作流程的工具数量的不断增加,增加智能自动化来提高美术效率变得越发重要;这种智能自动化通常主要依靠元数据:有关资源的自定义数据,在项目中为资源赋予意义&#xf…

基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 空间覆盖度模型 基于GA的优化方法 5.完整程序 1.程序功能描述 基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真。分别对三维空间的节点覆盖率,节点覆盖使用数量进行…

为什么走线宽度不同会引起阻抗畸变

事先说明:内容不是原创,或者只是自己的技术总结。仅仅用于本人日常记录 1 参考博客 参考博客来源: 原博客 2 基本知识点 2.1 为什么阻抗突变会引起反射 信号沿传输线传播时,其路径上的每一步,都有相应的瞬时阻抗&…

项目需求 | vscode远程免密登录Linux服务器指南-含所需的命令和步骤

步骤1:安装Remote - SSH扩展 在VSCode中,打开扩展视图,搜索并安装Remote Development扩展包,它包含了Remote - SSH扩展。 步骤2:生成SSH密钥对 在本地计算机上打开终端或命令提示符,执行以下命令&#…

约瑟夫环问题【算法 06】

约瑟夫环问题 约瑟夫环(Josephus Problem)是一个经典的数学和计算问题,其核心是解决在一群人围成一圈,每隔一定人数就淘汰一个人,最后剩下的那个人的编号。 问题描述 假设有 ( n ) 个人围成一圈,从第一个…

负载调制平衡放大器LMBA理论分析与ADS理想架构仿真

负载调制平衡放大器LMBA理论分析与ADS理想架构仿真 负载调制平衡放大器Load Modulation Balanced PA,简称LMBA是2016年Cripps大佬分析实践的: An Efficient Broadband Reconfigurable Power Amplifier Using Active Load Modulation 本文ADS工程下载链…

回顾MVC

Tomcat是servlet的容器,想用HttpServlet需要导入tomcat jar包 下图是没用springmvc时的场景,首先在web.xml里面配置访问路径为/Hello然后 通过get请求去调用login方法最后重定向到index.jsp中 index.jsp里面的内容 重定向到index.jsp中 在控制台获取到username里面的…

考研数学|强化速成!1000/660/880题重点刷哪本?

马上9月了,还在纠结做什么题吗,1000/660/880,这几本习题册都不错。我的建议是选一本主力习题册660。其中1000和880题都可以作为主力习题册,而660题专门考察客观题,可以作为辅助习题册来做。该怎么选呢?如果…

pytorch深度学习基础 8(简单的神经网络替换线性模型)

接上一节的思路,这一节我们将使用神经网络来代替我们的之前的线性模型作为逼近函数。我们将保持其他的一切不变,只重新定义模型,小编这里构建的是最简单的神经网络,一个线性模块,一个激活函数,然后一个线性…

8月25日笔记

IOX的使用 iox是一款功能强大的端口转发&内网代理工具,该工具的功能类似于lcx和ew,但是iox的功能和性能都更加强大。 实际上,lcx和ew都是非常优秀的工具,但还是有地方可以提升的。在一开始使用这些工具的一段时间里&#xff…

8月26日星期一今日早报简报微语报早读

8月26日星期一,农历七月廿三,早报微语早读。 1、中国战队EDG获得2024无畏契约全球冠军赛总冠军; 2、亚洲首例猴痘Ib变异病例出现,可通过飞沫传播; 3、三文鱼刺身隔夜返包销售 胖东来:奖励投诉者10万&…

第15届蓝桥杯青少组Scratch初级组省赛真题试卷

第十五届蓝桥杯青少组省赛Scratch初级组真题试卷 题目总数:10 总分数:360 选择题 第 1 题 单选题 Scratch运行以下程序,角色会说( )? A.29 B.31 C.33 D.35 第 2 题 单选题 scratch运行下列哪个程序后,宇航…