Flashscore网站Tooltip元素定位及下一场赛事信息提取技术求助
解决Flashscore赛事Tooltip提取问题
你的代码存在两个核心问题导致无法定位Tooltip:
- 硬编码选择器过于脆弱:使用
nth-child这类依赖DOM结构顺序的选择器,一旦网站更新布局就会失效,且无法适配动态加载的内容。 - 未触发Tooltip显示逻辑:Flashscore的Tooltip是鼠标悬停在触发元素上才会动态生成/显示的,初始状态下该元素可能不存在于DOM中或处于隐藏状态,直接用
presence_of_element_located无法捕获。
修改后的代码实现
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # 初始化配置 webdriver_path = "path_to_webdriver" url = "https://www.flashscore.pl/pilka-nozna/hiszpania/laliga" options = Options() options.add_argument("start-maximized") webdriver_service = Service(webdriver_path) driver = webdriver.Chrome(options=options, service=webdriver_service) driver.get(url) wait = WebDriverWait(driver, 15) actions = ActionChains(driver) try: # 等待赛事表格加载完成,选择第一个带"TBD"状态的触发元素(下一场赛事标识) trigger_elem = wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, "div.tableCellFormIcon--TBD._trigger_14qf7_41")) ) # 模拟鼠标悬停,触发Tooltip显示 actions.move_to_element(trigger_elem).perform() # 等待Tooltip可见并获取元素 tooltip_elem = wait.until( EC.visibility_of_element_located((By.CSS_SELECTOR, "div._tooltipContent_14qf7_62")) ) # 提取Tooltip文本内容 tooltip_text = tooltip_elem.text print("Tooltip内容:", tooltip_text) finally: driver.quit()
关键优化点
- 选择器优化:使用类名
tableCellFormIcon--TBD和_tooltipContent_14qf7_62定位元素,比依赖DOM顺序的选择器更稳定。 - 触发显示逻辑:通过
ActionChains.move_to_element()模拟鼠标悬停,确保Tooltip被激活显示。 - 等待条件调整:用
visibility_of_element_located替代presence_of_element_located,确保元素不仅存在于DOM中,还处于可见状态。 - 异常处理:添加
try-finally块保证浏览器正常关闭,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Mateusz Wójcik
相关产品推荐
相关产品推荐

