ActionChains悬停元素失效求助——NowGoal网站数据爬取
我来帮你排查这个悬停失效的问题——之前在Vista上能用,换到Win10后就不行,大概率是环境适配或页面交互逻辑的小问题,咱们一步步来解决:
先确认元素定位的准确性
你用.red定位比分元素,先打印score.get_attribute('outerHTML')看看是不是真正触发悬停的目标元素。有时候页面更新后,类名可能悄悄变了,或者这个.red元素是嵌套在父元素里,实际悬停事件是绑定在父节点上的,这时候直接悬停子元素就不会触发弹窗。添加显式等待,确保元素可交互
可能你找到元素的时候,它还没完全加载好或者处于不可交互状态,这时候用ActionChains悬停是无效的。试试用WebDriverWait等待元素可交互后再执行悬停:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待10秒,直到元素可交互 score = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, '.red')) ) ActionChains(browser).move_to_element(score).perform()检查浏览器驱动与浏览器版本的匹配性
Win10上的浏览器(比如Chrome/Firefox)版本和你使用的WebDriver版本是否对应?驱动版本过旧或过新都会导致ActionChains这类交互操作失效。比如Chrome浏览器,要确保chromedriver的主版本和Chrome浏览器的主版本完全一致,你可以重新下载对应版本的驱动试试。尝试用JavaScript直接触发mouseover事件
如果ActionChains还是不生效,可能是Win10系统层面的交互机制差异,试试绕过ActionChains,用JavaScript直接触发元素的mouseover事件:browser.execute_script("arguments[0].dispatchEvent(new MouseEvent('mouseover', {bubbles: true}));", score)这种方式不受系统交互逻辑的影响,有时候比ActionChains更可靠。
排查ActionChains的执行上下文
确保你调用perform()之前,ActionChains实例正确绑定了当前浏览器,而且没有未处理的弹窗、alert等阻塞后续操作。比如如果页面有隐藏的弹窗未关闭,会导致所有交互操作失效。
内容的提问来源于stack exchange,提问作者puppet

