Selenium Python点击Nike官网加购按钮无响应 反爬绕过方案求解
Nike官网Selenium自动化加购被拦截的解决方法
- 替换原生Selenium驱动为undetected-chromedriver,该驱动会自动修改所有可被反爬检测的指纹特征,比手动配置隐藏参数的效果好很多,安装命令:
pip install undetected-chromedriver,替换后初始化代码示例:
import undetected_chromedriver as uc options = uc.ChromeOptions() # 可选加隐身模式参数 options.add_argument("--incognito") options.add_argument("--disable-blink-features=AutomationControlled") driver = uc.Chrome(options=options)
- 移除多余的反人类操作逻辑:删除
driver.minimize_window()这行代码,正常用户不会打开浏览器后立刻最小化再最大化,这类异常操作会被反爬策略优先标记。 - 修正UA配置冲突:你先设置了随机UA,后续又用
execute_cdp_cmd硬编码了Chrome 83版本的UA,该版本浏览器已经非常老旧,会被Nike反爬直接标记拦截,删除硬编码UA的行,保留随机UA配置即可。 - 替换原生点击逻辑:不要直接调用
element.click(),该方法的触发特征容易被检测,换成两种方式二选一:- JS模拟点击:
driver.execute_script("arguments[0].click();", add_to_bag) - ActionChains模拟真人操作:先移动鼠标到按钮悬停,等待随机时长后再点击,示例代码:
- JS模拟点击:
from selenium.webdriver.common.action_chains import ActionChains import random # 移动到按钮位置 ActionChains(driver).move_to_element(add_to_bag).pause(random.uniform(0.3, 1.2)).click().perform()
- 替换固定时长的
time.sleep为随机等待+显式等待,固定整秒的等待间隔是自动化脚本的典型特征,每次操作后等待random.uniform(0.5, 2.5)秒的随机时长,元素定位用WebDriverWait显式等待,不要用强制等待。 - 操作前先处理弹窗:Nike官网加载后会弹出Cookie同意、隐私政策类弹窗,如果不先点击同意,后续的加购点击会被弹窗拦截,即使视觉上看起来已经点到了按钮,页面也不会响应,先加逻辑定位弹窗的同意按钮点击后再执行后续操作。
- 每次运行前清除浏览数据:如果已经被反爬标记过,同一浏览器实例的所有操作都会被拦截,启动时添加
options.add_argument("--incognito")开启隐身模式,每次运行都用全新的匿名会话,避免被历史指纹标记。
内容的提问来源于stack exchange,提问作者Akshat Jain
相关产品推荐
相关产品推荐

