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
相关产品推荐
相关产品推荐

