如何使用Selenium绕过Cloudflare机器人检测?
绕过Cloudflare机器人检测(非hCaptcha)的可行方案
修改
navigator.webdriver属性
Cloudflare核心检测点之一就是这个属性,Selenium默认会把它设为true,直接暴露自动化身份。用CDP命令在页面加载前修改这个属性:driver.executeCdpCommand("Page.addScriptToEvaluateOnNewDocument", ImmutableMap.of( "source", "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" ));注意要在打开目标页面之前执行这段代码,初始化driver后立刻运行即可。
补充浏览器模拟参数
现有参数不够全面,加上这些更贴近真实用户的启动参数:options.addArguments("--start-maximized"); // 最大化窗口,模拟正常用户操作 options.addArguments("--disable-extensions"); // 禁用扩展,减少异常特征 options.addArguments("--disable-dev-shm-usage"); // 解决资源限制问题,全平台适用 options.addArguments("--no-sandbox"); // 禁用沙箱模式,避免检测 options.addArguments("--disable-gpu"); // 禁用GPU加速,统一环境特征 options.addArguments("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36"); // 用你Chrome的真实UA,避免默认UA暴露UA可以直接在Chrome地址栏输入
navigator.userAgent复制准确值。模拟人类操作行为
不要极速操作页面,添加随机延迟,模拟滚动、点击等真实动作:// 随机等待1-3秒,避免操作过快 Thread.sleep((long) (Math.random() * 2000 + 1000)); // 模拟滚动页面到底部 ((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");操作间隔尽量随机,不要固定时长。
调整ChromeDriver实验选项(适配104版本)
针对Chrome 104,扩展excludeSwitches的参数,同时保持自动化扩展禁用:options.setExperimentalOption("excludeSwitches", Arrays.asList("enable-automation", "disable-popup-blocking")); options.setExperimentalOption("useAutomationExtension", false);重命名ChromeDriver(可选)
部分检测会识别ChromeDriver的默认文件名或签名,把chromedriver.exe重命名为chrome.exe,然后修改路径配置:System.setProperty("webdriver.chrome.driver", "drivers/chrome.exe");
内容的提问来源于stack exchange,提问作者Selman
相关产品推荐
相关产品推荐

