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

Selenium无法定位ST官网页面元素(含导出按钮)的技术求助

解决Selenium无法定位ST官网元素的问题

核心原因分析

  1. 无头模式被反爬识别:ST官网更新后新增反爬机制,默认无头Chrome会被判定为爬虫,导致页面仅渲染空body,无法加载实际内容。
  2. 未处理Cookie授权弹窗:页面加载后会弹出Cookie同意窗口,不处理会阻碍后续内容正常加载。
  3. 绝对XPath过于脆弱:你使用的层级式绝对XPath依赖固定页面结构,官网更新后直接失效,需改用基于元素属性的稳定定位方式。

分步解决方案

1. 优化无头Chrome配置,绕过反爬

给ChromeOptions添加模拟真实浏览器的参数,避免被反爬机制拦截:

options = webdriver.ChromeOptions()
prefs = {"download.default_directory": mypath}
options.add_experimental_option("prefs", prefs)
options.add_experimental_option("excludeSwitches", ["enable-logging"])

# 关键伪装参数
options.add_argument('--headless=new')  # 新版无头模式,更接近正常浏览器行为
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36')
options.add_argument('--window-size=1920,1080')  # 固定窗口尺寸,避免响应式布局干扰元素定位
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

2. 处理Cookie同意弹窗

页面加载后优先处理Cookie授权,确保内容正常渲染:

driver.get("https://www.st.com/en/diodes-and-rectifiers/power-schottky/products.html#")

# 等待并点击Cookie同意按钮
try:
    cookie_accept_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Accept all cookies']"))
    )
    cookie_accept_btn.click()
except TimeoutException:
    print("未检测到Cookie弹窗,继续执行")

3. 使用稳定的元素定位方式

放弃绝对XPath,改用基于元素文本的相对定位(导出按钮的span文本为"Export"):

# 等待导出按钮可点击
export_btn = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, "//span[text()='Export']/parent::a"))
)

# 直接点击a标签(比点击span更可靠)
export_btn.click()

完整修正代码

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
from selenium.common.exceptions import TimeoutException

# 替换为你的下载路径
mypath = "C:/your/download/path"

options = webdriver.ChromeOptions()
prefs = {"download.default_directory": mypath}
options.add_experimental_option("prefs", prefs)
options.add_experimental_option("excludeSwitches", ["enable-logging"])

# 无头模式伪装配置
options.add_argument('--headless=new')
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36')
options.add_argument('--window-size=1920,1080')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(executable_path='chromedriver.exe', options=options)
driver.get("https://www.st.com/en/diodes-and-rectifiers/power-schottky/products.html#")

# 处理Cookie弹窗
try:
    cookie_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Accept all cookies']"))
    )
    cookie_btn.click()
except TimeoutException:
    pass

# 等待并点击导出按钮
try:
    export_btn = WebDriverWait(driver, 20).until(
        EC.element_to_be_clickable((By.XPATH, "//span[text()='Export']/parent::a"))
    )
    export_btn.click()
    print("导出按钮点击成功")
except TimeoutException:
    print("无法定位导出按钮,请检查页面结构或反爬策略")

# 可选:等待下载完成后关闭浏览器
# time.sleep(10)
# driver.quit()

额外注意事项

  • 确保ChromeDriver版本与你的Chrome浏览器版本完全匹配(你的Chrome版本为110.0.5481.178,需下载对应版本的ChromeDriver)。
  • 如果仍无法定位元素,可临时关闭无头模式,手动打开浏览器查看页面实际加载状态,确认是否存在其他弹窗或动态加载逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:45:01