You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java网页爬取如何绕过Cloudflare验证?

绕过Cloudflare验证的ChromeDriver优化方案

你当前的配置存在几个核心问题导致无法通过Cloudflare验证,比如过旧的User-Agent、未隐藏自动化痕迹、固定等待时间不合理,以下是针对性的优化方案:

1. 修复核心参数,隐藏自动化特征

  • 更新User-Agent:你使用的Chrome 42版本UA过于陈旧,会直接被Cloudflare标记为异常请求,替换为当前主流Chrome版本的UA,例如:
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
    
  • 禁用自动化检测:添加--disable-blink-features=AutomationControlled参数,该参数会隐藏ChromeDriver默认暴露的window.navigator.webdriver标记,避免被Cloudflare识别为爬虫。
  • 模拟正常浏览器窗口:添加--window-size=1920,1080或--start-maximized模拟普通用户的窗口尺寸;若需使用无头模式,建议用Chrome 112+的新无头模式--headless=new,其行为更接近真实浏览器。

2. 优化ChromeOptions配置

移除与反爬无关的冗余参数(如--export-tagged-pdf、--use-mock-keychain),保留必要的稳定参数,修改后的配置示例:

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.Collections;

ChromeOptions chrome_options = new ChromeOptions();
// 现代Chrome User-Agent
chrome_options.addArguments("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36");
// 隐藏自动化痕迹
chrome_options.addArguments("--disable-blink-features=AutomationControlled");
// 模拟正常窗口大小
chrome_options.addArguments("--window-size=1920,1080");
// 稳定运行必备参数
chrome_options.addArguments("--no-first-run");
chrome_options.addArguments("--no-default-browser-check");
chrome_options.addArguments("--disable-background-mode");
chrome_options.addArguments("--disable-dev-shm-usage");
chrome_options.addArguments("--no-sandbox");
// 禁用自动测试扩展
chrome_options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
chrome_options.setExperimentalOption("useAutomationExtension", false);

ChromeDriver chromeDriver1 = new ChromeDriver(chrome_options);

3. 替换固定等待为显式等待

Thread.sleep(10000)的固定等待无法适配Cloudflare验证的实际耗时,改用显式等待验证完成(例如等待目标页面标题或特定元素出现):

import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import java.time.Duration;

chromeDriver1.get("TARGET_URL");

// 最多等待30秒,直到页面标题不再是Cloudflare验证页面的标题(如"Just a moment...")
WebDriverWait wait = new WebDriverWait(chromeDriver1, Duration.ofSeconds(30));
wait.until(ExpectedConditions.not(ExpectedConditions.titleContains("Just a moment")));

System.out.println(chromeDriver1.getTitle());

4. 额外反爬规避技巧

  • 控制请求频率:避免短时间内频繁请求同一站点,每次请求后随机停顿3-10秒,模拟人类浏览间隔。
  • 模拟人类行为:页面加载后可添加滚动、随机点击等操作,避免完全静态的爬虫行为。
  • IP轮换:若同一IP多次被拦截,可使用免费代理池轮换IP(注意选择未被标记的高质量代理)。

内容的提问来源于stack exchange,提问作者Trayvor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:37:08