为什么Python搭配Selenium webdriver无法正常访问Nordstrom网站
问题原因
- 目标网站部署了反爬机制,可识别Selenium启动的Chrome浏览器的自动化特征,返回拦截页面而非正常业务页面,你代码中定位的元素仅存在于正常页面,因此触发
NoSuchElementException报错 - 原代码未增加元素等待逻辑,就算页面正常加载,DOM渲染完成前执行元素查找也会触发同类报错
解决方案
修改代码添加反爬绕过配置、元素等待逻辑即可,修改后可运行的代码如下:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC CHROME_EXECUTABLE_PATH = "C://Program Files (x86)//Chrome Driver//chromedriver.exe" CHROME_OPTIONS = webdriver.ChromeOptions() # 基础配置 CHROME_OPTIONS.add_argument("--disable-notifications") # 绕过反爬检测核心配置 CHROME_OPTIONS.add_argument("--disable-blink-features=AutomationControlled") CHROME_OPTIONS.add_experimental_option("excludeSwitches", ["enable-automation"]) CHROME_OPTIONS.add_experimental_option("useAutomationExtension", False) # 配置真实UA避免默认自动化UA被拦截 CHROME_OPTIONS.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36") BASE_URL = "https://www.nordstrom.com/" driver = webdriver.Chrome(executable_path=CHROME_EXECUTABLE_PATH, options=CHROME_OPTIONS) # 移除window.navigator.webdriver特征标识 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) # 元素定位器 search_button_locator = "//a[@id='controls-keyword-search-popover']" search_box_locator = "//*[@id='keyword-search-input']" driver.get(BASE_URL) # 增加显式等待,最长等待10秒,直到元素加载完成再操作 wait = WebDriverWait(driver, 10) wait.until(EC.element_to_be_clickable((By.XPATH, search_button_locator))).click() wait.until(EC.visibility_of_element_located((By.XPATH, search_box_locator))).send_keys("Fave Slipper")
补充注意事项
- 若修改后仍出现拦截页面,可配置代理IP轮换策略,避免同一IP短时间内多次访问被站点限制
- 需保证Chrome Driver版本和本地安装的Chrome浏览器主版本完全匹配,否则可能出现兼容性问题导致页面加载异常
内容的提问来源于stack exchange,提问作者Mohibur_Cou
相关产品推荐
相关产品推荐

