如何解决 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 提供强大的客户支持,帮助解决任何问题或疑问,确保操作顺利进行并及时提供帮助。
详细的实现步骤
-
使用 Puppeteer 和 JavaScript 调用 CapSolver API 并访问网站
- Puppeteer 是一个功能强大的 Node.js 库,可用于通过 DevTools 协议控制无头 Chrome 或 Chromium。在本教程中,它被用来导航网页和处理复杂的交互,如处理验证码。
-
获取 Turnstile 的 SiteKey
- SiteKey 是解决 Turnstile 挑战所需的关键元素。这个密钥对每个网站都是唯一的,必须用于与验证码解决 API 交互。您可以通过分析网站的 HTML 来提取 SiteKey,或者使用类似 CapSolver 扩展 的工具来简化流程。有关如何识别所需参数的详细指南,请参考我们专门的博客文章。
-
使用 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();
- 使用 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和网易邮箱接入 🌟 手机短信与邮箱短信验证码的应用场景 在现代应用中,短信和邮箱验证码是用户验证和安全管理的关键组成部分。它们广泛应用于注册、登录、找回密码等场景…...
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概念 DevOps: Development 和 Operations 的组合 DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使…...
基于Python的网易民谣歌词数据分析的设计与实现
基于Python的网易民谣歌词数据分析的设计与实现 Design and Implementation of Data Analysis for NetEase Folk Song Lyrics Based on Python 完整下载链接:基于Python的网易民谣歌词数据分析的设计与实现 文章目录 基于Python的网易民谣歌词数据分析的设计与实现摘要第一章…...
趋动科技联合云轴科技推出GPU云原生超融合解决方案
近日,趋动科技VirtAITech携手云轴科技ZStack推出GPU云原生超融合联合解决方案,提供全面、可扩展的云原生GPU存算一体化解决方案。 该方案基于云原生超融合及GPU资源池化技术,使得GPU资源管理变得更加简便易用,能够帮助企业用户在…...
Dooring智图,一款开箱即用的图片海报编辑器
嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践,也陆陆续续设计并开发了多款可视化搭建产品,比如: Nocode/Doc,可视化 零代码打造下一代文件编辑器爆肝1000小时, Dooring零代码搭建平台3.5正式上线可视化…...
苹果macbook电脑怎么玩《黑神话:悟空》游戏教程来了
火爆全网《黑神话:悟空》是一款基于中国神话故事《西游记》改编的动作角色扮演游戏,它在PC平台上的系统要求已经公布,但目前官方尚未发布Mac版本。不过,Mac用户可以通过使用系统兼容工具如CrossOver来尝试在Mac上运行这款游戏。Cr…...
git 目录提交代码
初始化 Git 仓库(如果尚未初始化): 如果还没有初始化 Git 仓库,运行以下命令: git init将远程仓库添加到目录 b 中: 如果尚未关联远程仓库,添加远程仓库: 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…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
