如何绕过Cloudflare验证,用Puppeteer截图加密货币钱包页面?
绕过加密货币网站Cloudflare验证码/防火墙的Puppeteer解决方案
针对你用Puppeteer截图etherscan.io、zerion.io、solana.com钱包页面时被Cloudflare拦截的问题,以下是几个实用的解决方向:
1. 强化浏览器指纹模拟,超越基础stealth插件
- 启用
puppeteer-extra-plugin-stealth的全部子插件,确保覆盖navigator、webdriver、plugins等所有检测点,不要只依赖默认配置。 - 改用Puppeteer 19+的
headless: "new"模式,该模式更接近真实Chrome的行为,比旧无头模式更难被检测;如果仍不行,直接用有头模式,添加--start-maximized参数让窗口最大化,模拟真实用户的浏览器状态。 - 禁用自动化特征标记:启动浏览器时添加
--disable-blink-features=AutomationControlled参数,彻底移除Chrome的自动化标识。
2. 优化代理配置,避免IP被标记
- 放弃数据中心代理,优先使用原生住宅IP代理,且必须支持会话保持,确保同一次访问会话用同一个IP,避免频繁换IP触发风控。
- 匹配代理IP的地区配置请求头:比如代理IP在美区,就设置
Accept-Language: en-US,en;q=0.9,同时添加合理的Referer(比如从官网首页跳转的地址)。
3. 改用更彻底的反检测工具
- 替换Puppeteer为
undetected-chromedriver:它会修改Chrome二进制文件,从底层规避自动化检测,比stealth插件的效果更稳定。示例代码:
const uc = require('undetected-chromedriver'); const fs = require('fs'); async function captureWallet(url) { const driver = await uc.launch({ headless: false, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--start-maximized', '--proxy-server=http://你的住宅代理:端口' ] }); try { await driver.get(url); // 模拟真实用户等待和操作 await driver.sleep(Math.random() * 6000 + 7000); // 随机等待7-13秒 // 模拟鼠标移动 const actions = driver.actions({ async: true }); await actions.move({ x: 150, y: 250 }).perform(); await actions.move({ x: 350, y: 450 }).perform(); // 截图保存 const screenshot = await driver.takeScreenshot(); fs.writeFileSync('wallet_screenshot.png', screenshot, 'base64'); } finally { await driver.quit(); } } captureWallet('https://etherscan.io/address/目标钱包地址');
4. 模拟真实用户行为细节
- 页面加载完成后不要立刻截图,先等待10-15秒,期间模拟鼠标随机移动、滚动页面、点击空白区域等操作,避免机械性的自动化行为。
- 控制访问频率:不要批量连续请求多个钱包页面,每次请求间隔至少30秒,模拟真实用户的浏览节奏。
5. 长期稳定方案:改用官方API
加密货币网站大多提供官方数据接口:
- Etherscan有公开API可获取钱包交易、余额等数据;
- Solana可通过官方RPC节点查询钱包信息;
- Zerion也提供开发者API服务。
直接调用API获取数据,不仅不会被Cloudflare拦截,还比截图更高效、易解析。
内容的提问来源于stack exchange,提问作者microworlds
相关产品推荐
相关产品推荐

