如何使用undetected chromedriver访问Walmart.com并规避反爬检测?
规避Walmart反爬检测的undetected-chromedriver配置技巧
针对Walmart的反爬机制,你需要从浏览器特征伪装、行为模拟两方面优化配置,以下是具体可行的方案:
一、强化ChromeOptions配置
添加更多隐藏自动化痕迹、模拟真实浏览器的参数:
import undetected_chromedriver as uc from selenium import webdriver import time from fake_useragent import UserAgent # 生成随机用户代理 ua = UserAgent() user_agent = ua.random options = webdriver.ChromeOptions() # 基础隐身与去自动化标识 options.add_argument("--incognito") options.add_argument("--disable-blink-features=AutomationControlled") options.add_argument("--disable-dev-shm-usage") options.add_argument("--no-sandbox") options.add_argument("--disable-extensions") options.add_argument("--disable-plugins") options.add_argument("--start-maximized") # 设置随机用户代理 options.add_argument(f"--user-agent={user_agent}") # 可选:禁用图片加载以降低检测概率 options.add_argument("--blink-settings=imagesEnabled=false")
二、优化undetected-chromedriver初始化参数
使用use_subprocess=True启动子进程,避免主进程留下自动化痕迹:
driver = uc.Chrome(options=options, use_subprocess=True)
三、修改浏览器Navigator属性
通过JS注入进一步伪装浏览器环境,消除自动化特征:
# 执行JS修改navigator属性 driver.execute_script(""" Object.defineProperty(navigator, 'webdriver', {get: () => undefined}); Object.defineProperty(navigator, 'plugins', {get: () => [1,2,3,4,5]}); Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']}); """)
四、模拟真实用户行为节奏
避免机械性操作,加入随机等待、滚动等行为:
driver.get('https://www.walmart.com/') # 随机等待1-3秒,模拟用户浏览 time.sleep(2) # 模拟滚动页面 driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);") time.sleep(1) # 点击清仓标签前再等待 clearance_link = driver.find_element("xpath", "//a[contains(text(), 'Clearance')]") time.sleep(1.5) clearance_link.click()
额外注意事项
- 不要频繁更换IP或短时间内发起大量请求,否则会触发验证码
- 避免使用固定的用户代理,每次启动都随机生成
- 若仍出现验证码,可尝试导入真实浏览器登录Walmart后的cookie
内容的提问来源于stack exchange,提问作者Haski
相关产品推荐
相关产品推荐

