You need to enable JavaScript to run this app. Python Selenium爬取Sofascore网球数据点击跳转而非展示右侧面板如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium爬取Sofascore网球数据点击跳转而非展示右侧面板如何解决

问题原因

  • 你点击的元素是<a>标签的子元素,该网站前端做了双重交互逻辑:手动点击时JS会优先拦截点击事件,在右侧加载赛事数据;Selenium直接调用元素click方法的行为,没有触发JS的拦截逻辑,直接触发了<a>标签的原生跳转行为。
  • 你使用的绝对路径XPath稳定性极低,页面动态加载后DOM结构稍有变化,就会出现定位偏差,点击到错误的区域,直接触发跳转。
  • 部分网站会识别Selenium驱动的自动化浏览器,故意跳过右侧面板加载的逻辑,直接执行跳转。

解决方案

1. 调整点击逻辑,优先触发JS交互

不要点击<a>标签内部的div,直接定位到外层<a>标签,用JS执行点击同时阻止默认跳转:

# 首先替换你的绝对XPath为相对定位,这里用特征匹配定位赛事链接
target_a = wait(browser, 10).until(EC.element_to_be_clickable(
    (By.XPATH, '//div[@id="category-events-list"]//a[contains(@class, "EventCell_link__")]')
))
# 执行JS点击,阻止默认跳转行为
browser.execute_script("""
arguments[0].addEventListener('click', e => e.preventDefault(), {once: true});
arguments[0].dispatchEvent(new Event('click', {bubbles: true}));
""", target_a)

如果还是不行,可以用ActionChains模拟真实用户的点击流程,更贴近手动操作的行为:

ActionChains(browser).move_to_element(target_a).pause(0.3).click().perform()

2. 添加反检测配置,避免被识别为自动化浏览器

启动Chrome时添加隐藏自动化特征的配置:

options = Options()
options.binary_location = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
# 新增反检测配置
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

browser = webdriver.Chrome(options=options)
# 启动后抹去webdriver特征
browser.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

3. 替换绝对XPath为相对定位

不要使用从/html开头的绝对路径定位元素,改用元素的id、class、自定义属性等特征做相对定位,避免页面动态渲染导致的定位错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:06:14