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

绕过 Cloudflare 防护:Puppeteer 与 Node.js 的实战指南

1. 为什么需要绕过Cloudflare防护最近几年做自动化项目的开发者应该都深有体会Cloudflare的安全防护越来越难对付了。我去年帮一个电商公司做价格监控系统时就踩过坑他们的网站用了Cloudflare Turnstile防护普通的爬虫根本过不去。每次请求都会被拦截要么跳验证码要么直接返回403错误。Cloudflare的防护机制确实很强大。它不只是简单的验证码而是结合了多种检测手段JavaScript挑战要求浏览器执行特定JS代码并返回正确结果行为分析监测鼠标移动、点击模式等用户行为特征指纹识别收集浏览器环境信息生成唯一指纹IP信誉系统对可疑IP进行限速或拦截对于需要自动化操作网站的场景比如数据采集、自动化测试、批量注册等这些防护就像一堵高墙。我试过直接用axios发请求99%的情况都会被拦截。后来改用Puppeteer模拟浏览器环境才算是找到了突破口。2. 环境准备与工具选型2.1 基础环境搭建首先需要准备好开发环境我这里以MacOS为例Windows和Linux也大同小异# 安装Node.js建议用nvm管理版本 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash nvm install 18 nvm use 18 # 初始化项目 mkdir cloudflare-bypass cd cloudflare-bypass npm init -y # 安装核心依赖 npm install puppeteer-core axios为什么用puppeteer-core而不是puppeteer因为puppeteer会自动下载Chromium而puppeteer-core允许你使用本地已安装的Chrome。实测下来本地Chrome的指纹特征更接近真实用户被拦截的概率更低。2.2 验证码解决方案选择对付Cloudflare Turnstile光有Puppeteer还不够关键还得解决验证码。市面上常见的方案有手动打码适合低频需求但完全不符合自动化场景OCR识别对简单验证码有效但Turnstile这种动态验证码基本无效第三方API服务比如CapSolver、2Captcha等经过对比测试CapSolver的识别准确率和响应速度都不错特别是对Cloudflare系列验证码有专门优化。他们的API文档也比较清晰集成起来很方便。3. 实战代码解析3.1 获取Turnstile的SiteKeySiteKey是解决验证码的关键参数每个网站都不一样。获取方法有两种手动查找在网页源码中搜索sitekey或data-sitekey自动化提取用Puppeteer执行脚本获取这里给出第二种方法的实现代码async function getSiteKey(page) { return await page.evaluate(() { // 先尝试找显式的sitekey属性 const turnstileIframe document.querySelector(iframe[src*challenges.cloudflare.com]); if (turnstileIframe) { const src new URL(turnstileIframe.src); return src.searchParams.get(sitekey); } // 再尝试找data-sitekey属性 const element document.querySelector([data-sitekey]); return element?.dataset.sitekey; }); }3.2 调用CapSolver API拿到SiteKey后就可以请求CapSolver服务了。这里要注意几个关键参数websiteURL必须是当前页面的完整URLtype对于Turnstile要选AntiTurnstileTaskProxyLessmetadata有些网站会校验action参数完整实现代码const axios require(axios); async function solveTurnstile(apiKey, siteKey, pageUrl) { const payload { clientKey: apiKey, task: { type: AntiTurnstileTaskProxyLess, websiteKey: siteKey, websiteURL: pageUrl, metadata: { action: login // 根据实际场景调整 } } }; try { // 创建任务 const createResp await axios.post(https://api.capsolver.com/createTask, payload); const taskId createResp.data.taskId; // 轮询获取结果 let retries 0; while (retries 30) { // 最多等30秒 await new Promise(resolve setTimeout(resolve, 1000)); const resultResp await axios.post(https://api.capsolver.com/getTaskResult, { clientKey: apiKey, taskId: taskId }); if (resultResp.data.status ready) { return resultResp.data.solution.token; } if (resultResp.data.status failed) { throw new Error(验证码解决失败: ${JSON.stringify(resultResp.data)}); } } throw new Error(验证码解决超时); } catch (error) { console.error(API请求出错:, error.message); throw error; } }3.3 Puppeteer集成完整流程最后是把所有环节串联起来完整的操作流程const puppeteer require(puppeteer-core); async function bypassCloudflare(url) { // 1. 启动浏览器 const browser await puppeteer.launch({ headless: false, executablePath: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome, args: [--no-sandbox, --disable-setuid-sandbox] }); // 2. 打开新页面 const page await browser.newPage(); // 3. 设置真实用户指纹 await page.setUserAgent(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36); await page.setViewport({ width: 1280, height: 720, deviceScaleFactor: 1 }); try { // 4. 访问目标页面 await page.goto(url, { waitUntil: domcontentloaded, timeout: 30000 }); // 5. 检查是否触发Cloudflare const isBlocked await page.evaluate(() { return document.title.includes(Just a moment) || document.querySelector(#challenge-form) ! null; }); if (isBlocked) { console.log(检测到Cloudflare防护开始绕过...); // 6. 获取SiteKey const siteKey await getSiteKey(page); if (!siteKey) throw new Error(无法获取SiteKey); // 7. 调用CapSolver const token await solveTurnstile(你的API密钥, siteKey, url); // 8. 设置Cookie绕过 await page.setCookie({ name: cf_clearance, value: token, domain: new URL(url).hostname }); // 9. 刷新页面 await page.reload({ waitUntil: networkidle2 }); } // 10. 验证是否绕过成功 const content await page.content(); if (content.includes(被拒绝访问)) { throw new Error(绕过失败); } console.log(成功绕过Cloudflare防护); return content; } finally { await browser.close(); } }4. 常见问题与优化建议4.1 为什么有时候还是会失败根据我的实战经验失败通常有以下几个原因指纹特征不完整Cloudflare会检测WebGL、字体列表等高级指纹。可以添加以下代码增强隐蔽性await page.evaluateOnNewDocument(() { Object.defineProperty(navigator, webdriver, { get: () false }); Object.defineProperty(navigator, plugins, { get: () [1, 2, 3] }); Object.defineProperty(navigator, languages, { get: () [zh-CN, zh] }); });IP被标记建议使用优质代理IP并在代码中添加代理配置const browser await puppeteer.launch({ args: [ --proxy-serverhttp://your-proxy-ip:port, --disable-featuressite-per-process ] });行为模式异常添加随机延迟和人类化操作// 随机延迟函数 function randomDelay(min, max) { return new Promise(resolve setTimeout(resolve, min Math.random() * (max - min)) ); } // 模拟人类点击 async function humanClick(element) { await randomDelay(100, 500); await element.click(); }4.2 性能优化技巧复用浏览器实例不要每次请求都开新浏览器可以用browser.disconnect()和browser.connect()复用并行处理结合Promise.all处理多个页面但要注意控制并发量缓存机制有效期内重复使用cf_clearance cookieconst tokenCache new Map(); async function getCachedToken(siteKey) { if (tokenCache.has(siteKey)) { const { token, expires } tokenCache.get(siteKey); if (Date.now() expires) return token; } const freshToken await solveTurnstile(siteKey); tokenCache.set(siteKey, { token: freshToken, expires: Date.now() 30 * 60 * 1000 // 缓存30分钟 }); return freshToken; }5. 法律与道德注意事项虽然技术上讲我们可以绕过Cloudflare防护但必须注意法律风险。根据我的经验以下几点特别重要遵守robots.txt检查目标网站的爬虫政策控制请求频率建议每个域名每秒不超过1个请求尊重数据版权不要抓取明确禁止的内容用户隐私保护如果涉及用户数据必须匿名化处理我通常会添加这样的速率限制代码class RateLimiter { constructor(rpm) { this.lastRequestTime 0; this.interval 60000 / rpm; } async wait() { const now Date.now(); const waitTime this.lastRequestTime this.interval - now; if (waitTime 0) { await new Promise(resolve setTimeout(resolve, waitTime)); } this.lastRequestTime Date.now(); } } // 使用示例 const limiter new RateLimiter(30); // 每分钟30次 await limiter.wait();在实际项目中我建议先用合法的方式尝试获取数据比如联系网站所有者询问API只有当这些方式都不可行时再考虑技术解决方案。

相关文章:

绕过 Cloudflare 防护:Puppeteer 与 Node.js 的实战指南

1. 为什么需要绕过Cloudflare防护? 最近几年做自动化项目的开发者应该都深有体会,Cloudflare的安全防护越来越难对付了。我去年帮一个电商公司做价格监控系统时就踩过坑,他们的网站用了Cloudflare Turnstile防护,普通的爬虫根本过…...

OpenClaw 2026年阿里云8分钟本地云端集成零基础部署及使用教程

OpenClaw 2026年阿里云8分钟本地云端集成零基础部署及使用教程。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、Skills集成、阿里云百炼API…...

如何用Unity打造一款MMORPG:从零开始的全流程实战教程

如何用Unity打造一款MMORPG:从零开始的全流程实战教程 当《魔兽世界》《最终幻想14》等经典MMORPG持续创造商业奇迹时,许多开发者都怀揣着打造下一个爆款的梦想。Unity引擎凭借其跨平台能力和完善的工具链,已成为独立团队和中小厂商开发大型多…...

RMBG-2.0抠图工具性能测试:RTX 3060上平均1.8秒处理一张图

RMBG-2.0抠图工具性能测试:RTX 3060上平均1.8秒处理一张图 1. 为什么选择本地抠图工具? 在日常工作和内容创作中,我们经常需要处理图片背景去除的需求。无论是电商产品图、社交媒体配图还是设计素材,一个高效的抠图工具可以大幅…...

企业数字化转型的核心基础设施:组织人事信息管理系统

去年某制造企业 HR 负责人跟我抱怨:公司 800 多人,每次调整组织架构都要改十几个 Excel 表格,员工调岗要手动更新 5 个系统的数据,光是核对信息就要花 3 天时间。这不是个例,很多企业的人事管理还停留在表格时代&#…...

AI和苹果夹逼,国产手机顶不住了,网传大规模人才优化已在进行中

某已没落的手机企业在转卖后,近期又传出重大消息,只是这次是相当悲惨的消息,手机硬件研发被砍掉,半数员工就地解散,揭开了手机行业人才优化的序幕,其实手机行业的这种操作早在去年底就已悄然进行&#xff0…...

2026最新:宁波高新区代理记账收费标准公布,科技企业月均300元起

上周一位在高新区软件园创业的李总问我:"我们公司刚成立,就3个人,找一个代理记账一个月要花多少钱?"这个问题几乎是每个高新区创业者都会问的。作为在宁波服务了15年的财税机构,今天我就给大家说个明白。高新…...

PicGo无法安装插件| 提示“请安装 Node.js 并重启 PicGo 再继续操作”(问题已解决)

​​​​​​ 📌 问题分析:PicGo 提示“请安装 Node.js 并重启 PicGo 再继续操作” PicGo 提示“请安装 Node.js 并重启 PicGo 再继续操作”,说明问题出在环境变量或进程识别上,或者未安装 Node.js。本篇就前者进行分解&#xff0…...

将XXXUtils合而为一

将XXXUtils合而为一 2026-03-27 在AI辅助编程成为主流开发模式的当下,代码编写的交互逻辑正发生本质变革,开发者的核心协作对象已从团队同事变成了AI助手。传统Java开发中,StringUtils、FileUtils、DateUtils等分功能域拆分的工具类设计&…...

CLIP-GmP-ViT-L-14基础教程:ViT-L-14 patch embedding尺寸与分辨率适配

CLIP-GmP-ViT-L-14基础教程:ViT-L-14 patch embedding尺寸与分辨率适配 1. 理解CLIP-GmP-ViT-L-14模型 CLIP-GmP-ViT-L-14是一个经过几何参数化(GmP)微调的CLIP模型,在ImageNet和ObjectNet数据集上能达到约90%的准确率。这个模型继承了CLIP的核心能力&…...

墨语灵犀模型压缩与量化教程:降低部署资源消耗

墨语灵犀模型压缩与量化教程:降低部署资源消耗 你是不是也遇到过这种情况:好不容易找到一个效果不错的开源大模型,比如墨语灵犀,兴致勃勃地想部署到自己的服务器上试试,结果一看显存要求,直接傻眼了——动…...

别再死记硬背了!用主成分分析(PCA)的实战案例,反向理解线性代数里的谱分解

从鸢尾花降维实战逆向拆解:为什么PCA中的谱分解是线性代数的精髓? 记得第一次用PCA处理鸢尾花数据集时,盯着sklearn输出的三维散点图发愣——明明原始数据有4个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度)&#xf…...

AI Agent:从定义到分类,带你深入理解智能体的核心奥秘!

本文首先明确了AI Agent的定义,即结合深度学习技术(尤其是大模型技术)并能执行任务的下游应用。接着,文章列举了AI Agent的实际案例,如美团小美、AI Coding工具、SlidevAI和deepwiki,并区分了哪些应用不属于…...

xhs:突破小红书数据采集壁垒的5个实战方法

xhs:突破小红书数据采集壁垒的5个实战方法 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 从反爬困境到合规采集的完整解决方案 在数字化营销与市场研究领域&am…...

思源宋体TTF:开源中文字体的技术突破与商业价值重构

思源宋体TTF:开源中文字体的技术突破与商业价值重构 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字化内容爆炸的今天,中文字体的选择直接影响信息传递的…...

VMware虚拟机体验FLUX.1:Windows系统免环境配置方案

VMware虚拟机体验FLUX.1:Windows系统免环境配置方案 想快速体验最新的AI绘画技术却苦于环境配置?FLUX.1作为当前最强的开源文生图模型之一,让很多Windows用户望而却步。本文介绍一种零门槛的解决方案——通过VMware虚拟机一键体验&#xff0c…...

Phi-3-mini-128k-instruct数学推理能力展示:求解方程与几何证明

Phi-3-mini-128k-instruct数学推理能力展示:求解方程与几何证明 最近,我花了不少时间测试微软开源的Phi-3-mini-128k-instruct模型,想看看它在数学推理这块到底行不行。毕竟,一个模型如果能清晰、有条理地解决数学问题&#xff0…...

智能物流分拣破局:越疆协作分拣机器人高效升级指南

在电商、快递行业的高速发展下,物流分拣的压力越来越大,但长期以来,中小物流企业的分拣面临 “两难” 困境:人工分拣招工难、效率低,错分率达 1% 以上,大促期间更是人手不足;而传统的交叉带分拣…...

ChatGLM-6B生产级部署:Supervisor配置文件结构与自定义参数说明

ChatGLM-6B生产级部署:Supervisor配置文件结构与自定义参数说明 1. 引言 在生产环境中部署AI服务时,稳定性是首要考虑的因素。ChatGLM-6B作为一款优秀的开源对话模型,如何确保其7x24小时稳定运行成为了关键问题。本镜像采用了Supervisor进程…...

Day | 11 【苍穹外卖统计业务的实现:含详细思路分析】

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...

GetQzonehistory:5分钟快速备份QQ空间历史说说的终极指南

GetQzonehistory:5分钟快速备份QQ空间历史说说的终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的记忆越来越依赖于在线平台。QQ空间作…...

claude code 使用

1,模型更换进入C盘目录 C:\Users\****\.claude 找到 settings.json这个是通义千问模型{"env": {"ANTHROPIC_AUTH_TOKEN": "sk-3db74945b4a****","ANTHROPIC_BASE_URL": "https://dashscope.aliyuncs.com/apps/anthro…...

百考通:AI赋能让学术研究起步更高效

对于每一位学子与科研人而言,开题报告是学术研究的“第一粒扣子”,它不仅是研究方向的蓝图,更是顺利推进论文写作、获得导师认可的关键。然而,选题迷茫、文献梳理繁琐、逻辑框架搭建困难等问题,常常让开题之路步履维艰…...

MusePublic Art Studio惊艳效果:动态种子演化生成同主题12张连贯艺术组图

MusePublic Art Studio惊艳效果:动态种子演化生成同主题12张连贯艺术组图 1. 引言:当AI成为艺术家的画笔 想象一下,你是一位艺术家,脑海中有一个绝妙的创意主题。你想围绕这个主题创作一个系列作品,比如“赛博朋克森…...

Wan2.1视频生成案例分享:从萌宠到科幻,AI视频作品集

Wan2.1视频生成案例分享:从萌宠到科幻,AI视频作品集 1. 开篇:当文字变成动态画面 想象一下这样的场景:你脑海中浮现出一只橘猫在窗台上慵懒地晒太阳,阳光透过玻璃窗洒在它毛茸茸的身体上;或者你构思了一个…...

YOLO-Master 的MoE方案分解

之前,进行论文精度。今天看下具体代码 文章目录1. OptimizedMOEImproved加载模块过程2. 路由模块 EfficientSpatialRouter3. 专家 SimpleExpert实例条件自适应MoE 剪枝 (MoEPruner)聚类加权 NMS (CW-NMS)1. OptimizedMOEImproved 同构专家:通常使用相同…...

s2-pro镜像管理:容器健康检查脚本编写与自动化服务恢复方案

s2-pro镜像管理:容器健康检查脚本编写与自动化服务恢复方案 1. 引言 s2-pro作为专业级语音合成模型镜像,在实际业务场景中承担着重要角色。当服务出现异常时,如何快速发现问题并自动恢复成为运维工作的关键。本文将详细介绍如何为s2-pro编写…...

Display Driver Uninstaller:显卡驱动残留问题的技术深度解析与系统级清理方案

Display Driver Uninstaller:显卡驱动残留问题的技术深度解析与系统级清理方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/displ…...

日本留学中介避坑指南:免费申请与实体保障,哪种模式更适合你?

摘要随着赴日留学热度持续攀升,市面上的日本留学中介机构也如雨后春笋般涌现。对于计划通过语言学校过渡并升学的学生及家庭而言,如何在‘免费申请’与‘传统收费’、‘线上服务’与‘实体保障’之间做出抉择,往往充满困惑与信息不对称。本文…...

绝美辛夷花海!九皇山春日限定,羌族古寨里的粉色浪漫

九皇山位于四川省绵阳市北川羌族自治县桂溪镇,是国家4A级旅游景区,地处四川盆地西北边缘与川西高原的过渡地带,属典型喀斯特地貌,核心风貌兼具丰富的自然生态景观与深厚的羌族人文底蕴,景区占地面积25平方公里&#xf…...