You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium开发Nike SNKRS Bot遇反爬检测,登录页受阻求解

解决Nike SNKRS Bot被检测为机器人的问题

问题描述

我使用Python的Selenium库开发适配Chrome浏览器的Nike SNKRS Bot,选用主流WebDriver进行管理,但卡在了Nike登录页面。执行代码后页面出现错误提示:“Error parsing response from server”,确定Nike将程序检测为机器人,无法继续操作。我的代码如下:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.proxy import Proxy, ProxyType
from random_user_agent.user_agent import UserAgent
from selenium.common.exceptions import TimeoutException, WebDriverException
from random_user_agent.params import SoftwareName, OperatingSystem 
import traceback
options = Options()
options.add_argument("--start-maximized")
options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--lang=en')
options.add_experimental_option('useAutomationExtension', False)
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
options.add_argument('user-agent={0}'.format(user_agent))
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1420,1080")
service=Service('C:\\chromedriver_win32\\chromedriver.exe')
driver = webdriver.Chrome(options=options,service=service)
driver.delete_all_cookies()
driver.execute_script('return navigator.webdriver')
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"})
driver.get('https://www.nike.com')

def send_keys_delay(controller,keys,delay=1):
    controller.click()
    for key in keys:
        controller.send_keys(key)
        time.sleep(delay)
    controller.send_keys(Keys.RETURN)
try:
    elem=WebDriverWait(driver,5).until(
        ec.presence_of_element_located((By.ID,"hf_cookie_text_cookieAccept"))
    )
    print(elem.text)
    elem.click()
except:
    traceback.print_exc()
    driver.quit()
time.sleep(3)
try:
    elem=driver.find_element(By.ID,"hf_title_signin_membership")
    elem.click()
except Exception:
    traceback.print_exc()
    driver.quit()
try:
    elem=WebDriverWait(driver,5).until(
        ec.element_to_be_clickable((By.ID,"username")))
    email="myemail@gmail.com"
    send_keys_delay(elem,email)


except Exception:
    traceback.print_exc()
    driver.quit()

可行的Selenium优化方案

Nike的反爬机制严格,但通过调整配置和行为模拟,仍有概率绕过检测:

  • 匹配ChromeDriver与浏览器版本:确保ChromeDriver的版本和你本地Chrome浏览器完全一致,版本不匹配是常见的检测触发点。
  • 优化浏览器指纹:
    • 替换硬编码的UA,用random_user_agent动态生成真实的随机UA,避免使用过时的固定UA:
      software_names = [SoftwareName.CHROME.value]
      operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.MACOS.value]
      user_agent_rotator = UserAgent(software_names=software_names, operating_systems=operating_systems, limit=100)
      user_agent = user_agent_rotator.get_random_user_agent()
      options.add_argument(f'user-agent={user_agent}')
      
    • 添加更多隐私与反检测参数:
      options.add_argument("--disable-dev-shm-usage")
      options.add_argument("--no-sandbox")
      options.add_argument("--disable-web-security")
      options.add_argument("--disable-features=VizDisplayCompositor")
      
  • 模拟真实用户交互:
    • 替换固定的time.sleep,全程用WebDriverWait等待元素条件,减少不必要的固定延迟。
    • 输入时使用随机延迟(比如0.2-0.8秒),模拟人类打字的不均匀速度,修改send_keys_delay函数:
      import random
      def send_keys_delay(controller,keys):
          controller.click()
          for key in keys:
              controller.send_keys(key)
              time.sleep(random.uniform(0.2, 0.8))
          controller.send_keys(Keys.RETURN)
      
    • 用ActionChains模拟鼠标移动到元素再点击的动作,更贴近真实用户操作:
      from selenium.webdriver.common.action_chains import ActionChains
      # 替换原有的elem.click()
      actions = ActionChains(driver)
      actions.move_to_element(elem).click().perform()
      
  • 彻底隐藏navigator.webdriver:
    原代码的处理不够彻底,改用CDP命令在页面加载前注入脚本,覆盖所有页面的检测:
    # 放在driver.get()之前执行
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            })
        """
    })
    

替代方案

如果Selenium优化后仍无法绕过检测,可尝试以下方案:

  • 使用Playwright:微软推出的自动化工具,默认自带反检测优化,能自动隐藏大部分自动化特征,语法和Selenium接近,对反爬网站兼容性更强。
  • 直接调用API:抓包分析Nike的登录、商品接口,用requests或httpx直接发送请求,完全避开浏览器层面的检测,但需要处理签名、Cookie、Token等复杂验证逻辑,开发难度更高。
  • 使用undetected-chromedriver:Selenium的分支库,专门针对反爬做了优化,自动处理浏览器指纹、WebDriver检测等问题,无需手动配置大量参数。

内容的提问来源于stack exchange,提问作者JustDarkForce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:10:47