当前位置: 首页 > news >正文

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

我认为,现在自动化任务越多,越能体现它们的价值,因此挑战也变得更加明显和困难。例如,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);// TODOawait 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

相关文章:

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

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

笔记redis

Redis 介绍 Redis(Remote Dictionary Server)是用C语言开发的一个基于内存的键值对数据库 所有数据都在内存中,访问速度非常快:读的速度是110000次/s,写的速度是81000次/s适合存储热点数据(商品、新闻资…...

Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱

Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱接入 🌟 手机短信与邮箱短信验证码的应用场景 在现代应用中,短信和邮箱验证码是用户验证和安全管理的关键组成部分。它们广泛应用于注册、登录、找回密码等场景&#xf…...

RAID 方案比较

RAID(Redundant Array of Independent Disks)技术用于将多个磁盘驱动器组合成一个逻辑单元,以提高性能、可靠性或两者兼顾。以下是常见 RAID 级别的比较: RAID 0(条带化) 磁盘数量:最少 2 块可…...

零成本搭建个人 APP 和小程序后台

前言 前面也说了,通过 GitHub PagesGitHub Actions 只是解决了动态数据展示,但是要零成本得完成将用户信息存储下来,并实现数据交互呢? 我开始是想用云文档,种种原因,我还是希望有个自己能二次修改的后台…...

LCP 633 平方数之和 [leetcode - 8]

最近是在研究双指针啊,leetcode刷的题都是这方面的。都记录在最近的文章里,大家有兴趣可以去我主页看看 LCP633 平方数之和 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 b2 c 。 示例 1: 输入&…...

c语言试题及答案

1. 一个C程序的组成部分可以是(  )。 A) 一个主函数和一至若干个其他函数 B) 一至若干个主函数 C) 一个主程序和一至若干个其他函数 D) 一个主程序和一至若干个子程序 2. 一个C程序的执行是从( )。 (A)本程序的main函数开始,到main函数结束 (B)本程序文件的第一个函…...

python实现链表

什么是链表 链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item和指向下一个节点的指针next。通过节点之间的相互连接最终串联成一个链表。 python实现一个简单链表 我们可以用python实现一个超级简单的链表 class node:# 初始化数据def __init_…...

Linux Shell 编程基础入门(一)

😀前言 本篇博文是关于自动化工具Shell 编程的基本介绍,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…...

大白话讲微服务的灾难性雪崩效应

讲在前面,为什么微服务需要有熔断等策略呢?今天我们用大白话来讲讲微服务的灾难性雪崩效应,熔断策略就是解决雪崩效应的有效解决方案。 什么是灾难性雪崩效应? 假设我们有两个访问量比较大的服务A和B,这两个服务分别依…...

配置 K3s 访问私有镜像仓库

1.修改 K3s 配置文件 1)对于较新的 K3s 版本,你可以通过编辑 K3s 的配置文件来指定镜像仓库。编辑 /etc/rancher/k3s/config.yaml 文件(如果不存在则需要创建),添加或修改以下配置: # /etc/rancher/k3s/config.yaml …...

数学建模之数据分析【七】:对Pandas DataFrame 进行切片

文章目录 一、切片简介二、创建Pandas数据框三、使用iloc进行切片3.1 对行进行切片3.2 对列进行切片3.3 Dataframe选中特定单元格 四、使用loc创建切片4.1 使用Python对Dataframe中的行进行切片4.2 指定单元格 五、在Python中使用布尔条件六、结论 对 Pandas DataFrames 进行切…...

删除 Docker 容器的日志文件

删除 Docker 容器的日志文件可以帮助释放磁盘空间。以下是步骤: 1、查找日志文件路径: Docker 容器的日志通常存储在 /var/lib/docker/containers/<container_id>/ 目录下。日志文件通常名为 container_id-json.log。 通过以下命令找到日志文件的位置: docker ins…...

DevOps入门(上)

1: DevOps概念 &#xfeff;&#xfeff;DevOps: Development 和 Operations 的组合 DevOps 看作开发&#xff08;软件工程&#xff09;、技术运营和质量保障&#xff08;QA&#xff09;三者的交集。 突出重视软件开发人员和运维人员的沟通合作&#xff0c;通过自动化流程来使…...

基于Python的网易民谣歌词数据分析的设计与实现

基于Python的网易民谣歌词数据分析的设计与实现 Design and Implementation of Data Analysis for NetEase Folk Song Lyrics Based on Python 完整下载链接:基于Python的网易民谣歌词数据分析的设计与实现 文章目录 基于Python的网易民谣歌词数据分析的设计与实现摘要第一章…...

趋动科技联合云轴科技推出GPU云原生超融合解决方案

近日&#xff0c;趋动科技VirtAITech携手云轴科技ZStack推出GPU云原生超融合联合解决方案&#xff0c;提供全面、可扩展的云原生GPU存算一体化解决方案。 该方案基于云原生超融合及GPU资源池化技术&#xff0c;使得GPU资源管理变得更加简便易用&#xff0c;能够帮助企业用户在…...

Dooring智图,一款开箱即用的图片海报编辑器

嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践&#xff0c;也陆陆续续设计并开发了多款可视化搭建产品&#xff0c;比如&#xff1a; Nocode/Doc&#xff0c;可视化 零代码打造下一代文件编辑器爆肝1000小时, Dooring零代码搭建平台3.5正式上线可视化…...

苹果macbook电脑怎么玩《黑神话:悟空》游戏教程来了

火爆全网《黑神话&#xff1a;悟空》是一款基于中国神话故事《西游记》改编的动作角色扮演游戏&#xff0c;它在PC平台上的系统要求已经公布&#xff0c;但目前官方尚未发布Mac版本。不过&#xff0c;Mac用户可以通过使用系统兼容工具如CrossOver来尝试在Mac上运行这款游戏。Cr…...

git 目录提交代码

初始化 Git 仓库&#xff08;如果尚未初始化&#xff09;&#xff1a; 如果还没有初始化 Git 仓库&#xff0c;运行以下命令&#xff1a; git init将远程仓库添加到目录 b 中&#xff1a; 如果尚未关联远程仓库&#xff0c;添加远程仓库&#xff1a; git remote add origin <…...

多商户商品下单限购问题修复

问题: 当商品设置限购为 1 时,够买数量未超过限购,但是还是提示超出限购数量 修复方法: 修改代码路径: app\common\repositories\store\order\StoreOrderCreateRepository.php 修改代码一: i s p a y s a r r a y u n i q u e ( a r r a y c o l u m n ( is_pays array_un…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...