Python Selenium如何获取鼠标悬停展示的元素信息
Selenium获取kalstall.de站点悬停触发的昵称描述方案
这个站点的昵称描述是hover事件触发的动态DOM渲染,没有做特殊反爬,用Selenium自带的动作链模拟真实鼠标悬停就能拿到,按下面步骤操作就行:
- 先升级你的Selenium到4.0以上版本,不用手动下载浏览器驱动,内置的驱动管理器会自动匹配版本,执行安装命令:
pip install selenium --upgrade - 核心逻辑分三步:定位目标昵称元素 → 模拟鼠标悬停在元素上 → 等动态加载的描述框出现后提取文本
可直接运行的参考代码
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 初始化Chrome实例 driver = webdriver.Chrome() # 打开目标站点 driver.get("https://kalstall.de/") # 配置最长10秒的显式等待 wait = WebDriverWait(driver, 10) # 初始化动作链 actions = ActionChains(driver) # 替换成你实际要抓取的昵称元素的定位规则 # 定位方式可以用CSS选择器、XPath,按你实际DOM结构来 nickname_ele = wait.until(EC.presence_of_element_located( (By.CSS_SELECTOR, "替换为昵称元素的CSS选择器") )) # 执行鼠标悬停操作,完全模拟真人操作触发事件 actions.move_to_element(nickname_ele).perform() # 等待悬停触发的描述弹窗加载为可见状态 # 提示:手动在页面悬停出描述框后按F8暂停JS执行,就能在开发者工具里找到这个描述框的DOM节点,直接复制选择器即可 desc_ele = wait.until(EC.visibility_of_element_located( (By.CSS_SELECTOR, "替换为悬停后显示的描述元素的CSS选择器") )) # 提取描述文本 desc_content = desc_ele.text print("获取到的描述内容:", desc_content) # 操作完成关闭浏览器 driver.quit()
常见踩坑处理
- 先检查昵称元素有没有原生
title属性:如果有,不需要做悬停操作,直接用nickname_ele.get_attribute("title")就能拿到描述内容,效率更高 - 批量抓取多个昵称的描述时,每次抓完单个内容要把鼠标移到页面空白处重置悬停状态,避免多个提示层叠导致内容抓取错误,加一行
actions.move_to_element(driver.find_element(By.TAG_NAME, "body")).perform()即可 - 不要用
time.sleep()做固定等待,网络波动时很容易因为元素没加载完成抛错,用上面代码里的显式等待即可,元素加载完就会立刻执行下一步,稳定性和效率都更高 - 如果悬停后提示框一闪而过不好定位,打开开发者工具后切到源代码面板,手动悬停出提示框的时候按F8就能暂停页面JS执行,动态生成的DOM节点会被固定住,直接复制选择器就行
内容的提问来源于stack exchange,提问作者Григорій
相关产品推荐
相关产品推荐

