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

Oddsportal开盘赔率提取问题:Selenium无法定位tooltipdiv元素

解决Oddsportal悬停tooltip无法定位的问题

问题核心

Oddsportal的tooltipdiv是动态生成的悬浮元素,原代码存在驱动冗余、headless模式交互兼容性差、定位逻辑不严谨、等待机制不稳定等问题,导致悬停后无法捕获目标元素。

修复方案

1. 清理冗余驱动初始化

原代码同时初始化wd和driver两个Chrome实例,会造成资源浪费和逻辑冲突,仅保留一个驱动实例即可。

2. 优化Headless模式配置

默认Headless模式对交互效果支持有限,添加参数模拟真实浏览器环境:

chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
chrome_options.add_argument('--headless=new')  # 启用新版Headless,提升交互兼容性

3. 用显式等待替代固定Sleep

固定sleep无法适配页面加载波动,改用WebDriverWait精准等待元素状态:

  • 等待目标赔率单元格加载完成
  • 悬停后等待tooltipdiv出现再定位

4. 简化元素定位逻辑

原定位路径嵌套过深且XPath存在歧义,简化定位表达式提升稳定性:

  • 目标单元格://table[@class='table-main detail-odds sortable']/tbody/tr[1]/td[2]
  • Tooltip元素:直接通过ID定位

完整修复代码

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.webdriver import ActionChains
from selenium import webdriver
import warnings
warnings.filterwarnings("ignore")

# 配置Chrome选项
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless=new')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")

# 初始化单个驱动实例
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.oddsportal.com/soccer/brazil/serie-b/gremio-cruzeiro-WhMMpc7f/')

try:
    # 等待目标赔率单元格加载完成
    target_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//table[@class='table-main detail-odds sortable']/tbody/tr[1]/td[2]"))
    )
    
    # 执行悬停操作
    hover = ActionChains(driver).move_to_element(target_element)
    hover.perform()
    
    # 等待tooltipdiv出现并获取内容
    tooltip = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'tooltipdiv'))
    )
    print("Tooltip内容:", tooltip.text)
    
finally:
    driver.quit()

额外提示

  • 若仍无法触发tooltip,可临时去掉--headless参数测试,排查是否为反爬机制限制
  • 定期检查Oddsportal页面结构,网站DOM更新可能导致定位表达式失效

内容的提问来源于stack exchange,提问作者Om Prakash Panda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:21:30