Selenium使用detach模式解析网页仍被识别为机器人问题咨询
问题根因
- 你已经完成了静态特征的隐藏(移除cdc_特征、关闭自动化标识开关),但目标站点的检测逻辑针对首次请求的运行时特征、自动化调用链路特征做了校验:
- 首次通过
driver.get()请求目标页时,页面上下文还残留Selenium启动带来的临时异常特征,同时首次请求的头顺序、TLS指纹和人工启动浏览器的请求存在差异,会被识别为机器人 - 手动点击刷新时,浏览器会重建页面上下文,清除残留的自动化特征,同时刷新操作属于人工硬件交互,没有可识别的脚本调用标记,所以可以正常加载
- 代码层面调用
driver.refresh()或者Selenium模拟F5的操作,本质还是走Selenium的自动化调用链路,会携带特殊标记,依然会被检测拦截
- 首次通过
可行解决方案
方案1:修改初始页面加载逻辑
不要直接用driver.get()打开目标站,先加载中转页/空白页后用JS跳转,模拟人工输入地址访问的行为:
from selenium.webdriver.chrome.options import Options from selenium import webdriver import time chrome_options = Options() # 你原有的配置保持不变 chrome_options.add_argument("start-maximized") chrome_options.add_experimental_option("detach", True) chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument("--disable-blink-features") chrome_options.add_argument('window-size=1920,1080') chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 补充优化项,减少特征暴露 chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--disable-dev-shm-usage") driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options) # 注入脚本覆盖webdriver属性,清除运行时特征 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" }) # 先打开空白页等待2秒,模拟人工启动浏览器后的等待行为 driver.get("about:blank") time.sleep(2) # 用JS跳转到目标页 target_url = "替换为你的目标站点URL" driver.execute_script(f"window.location.href='{target_url}'")
方案2:用硬件级输入模拟刷新
如果还是需要刷新操作,不要用Selenium内置的刷新方法,改用第三方库模拟硬件级的按键操作,不会携带自动化调用特征:
# 先安装依赖:pip install pyautogui import pyautogui # 首次加载被拦截后等待3秒,模拟人工操作间隔 time.sleep(3) # 模拟硬件级按下F5刷新 pyautogui.press('f5')
内容的提问来源于stack exchange,提问作者valter
相关产品推荐
相关产品推荐

