FedEx检测Selenium Chrome自动化登录返回403的绕过方案咨询
绕过FedEx Selenium自动化检测的有效方案
当前被拦截不是单一特征识别导致的,FedEx目前部署了多层反爬规则,仅替换chromedriver的cdc_字段、关闭基础webdriver标识无法绕过,可按以下顺序调整方案:
- 首先替换旧版无头模式:代码里用的
--headless是旧版无头参数,存在大量可被识别的特征,直接替换为--headless=new,该模式是Chrome 112+版本推出的全功能无头模式,指纹和正常打开的Chrome完全一致,旧无头模式即使修改user-agent也会在插件列表、屏幕参数、API返回值等位置暴露特征。 - 提前注入指纹覆盖脚本:不要等页面加载完成后再执行反检测脚本,要在初始化driver后、访问任何站点前通过CDP命令注入脚本,覆盖所有已知的自动化特征:
# 初始化driver后立刻执行 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', {get: () => undefined}) window.chrome = { runtime: {}, loadTimes: () => {}, csi: () => {}, app: {} } const originQuery = window.navigator.permissions.query window.navigator.permissions.query = params => ( params.name === 'notifications' ? Promise.resolve({state: Notification.permission}) : originQuery(params) ) Object.defineProperty(navigator, 'plugins', {get: () => [1,2,3,4,5]}) Object.defineProperty(navigator, 'languages', {get: () => ['en-US','en']}) Object.defineProperty(navigator, 'platform', {get: () => 'Win32'}) """ })
- 直接替换原生Selenium为
undetected-chromedriver:手动补全所有特征配置成本很高,这个库已经默认抹除了所有已知的Chrome自动化检测特征,不需要手动加excludeSwitches、disable-blink-features这类参数,改造代码成本极低:
# 先执行 pip install undetected-chromedriver import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait as wait from selenium.webdriver.support import expected_conditions as EC import time, random options = uc.ChromeOptions() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument("--window-size=1280,1000") # 若需要无头模式使用下面的参数 # options.add_argument('--headless=new') driver = uc.Chrome(options=options, version_main=102) # version_main匹配本地Chrome大版本号
- 模拟真实用户访问轨迹:不要直接访问登录页,先打开FedEx首页,随机等待3-6秒后再跳转登录页;输入账号密码时不要一次性直接send_keys,每个字符间隔0.1-0.3秒的随机延迟,输入完账号停1-2秒再输密码,输完密码停1-3秒再点击登录,过快的操作节奏也是反爬规则的核心判定项。
- 如果上述调整后仍被拦截,可以直接加载本地日常使用的Chrome用户配置目录启动,直接复用手动登录后的有效Cookie,跳过登录步骤:
# 注意:启动前必须关闭所有正在运行的Chrome进程,否则配置文件会被锁定导致启动失败 options.add_argument(r"--user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data") # 路径替换为本地的Chrome用户数据路径 options.add_argument("--profile-directory=Default") # 对应日常使用的Chrome配置文件名
内容的提问来源于stack exchange,提问作者Bijan
相关产品推荐
相关产品推荐

