You need to enable JavaScript to run this app. Python Selenium如何获取荷兰土壤站点动态变化的tooltip文本
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium如何获取荷兰土壤站点动态变化的tooltip文本

动态tooltip文本抓取实现方案

你遇到的是hover触发即时渲染、失焦立即销毁/隐藏的动态组件抓取问题,以下是3种可直接落地的实现思路:

  • 方案1:模拟悬浮+显式等待捕获(兼容性最高)
    用Selenium自带的ActionChains模拟鼠标悬浮到对应土层颜色区块,配合显式等待捕获tooltip渲染后的内容,避免固定等待时间的不稳定问题,参考代码如下:
    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
    
    # 请替换为实际的土层颜色区块CSS选择器,可通过浏览器F12开发者工具获取
    soil_blocks = driver.find_elements(By.CSS_SELECTOR, '土层颜色区块选择器')
    tooltip_locator = (By.ID, 'columns-tooltip')
    
    for block in soil_blocks:
        # 模拟鼠标悬浮到当前土层区块
        ActionChains(driver).move_to_element(block).perform()
        # 等待tooltip元素出现且内容非空,最长等待3秒
        WebDriverWait(driver, 3).until(EC.presence_of_element_located(tooltip_locator))
        tooltip = driver.find_element(*tooltip_locator)
        WebDriverWait(driver, 3).until(lambda x: tooltip.text.strip() != '')
        # 输出当前土层描述内容
        print(tooltip.text.strip())
        # 移开鼠标准备处理下一个区块
        ActionChains(driver).move_by_offset(20, 20).perform()
    
  • 方案2:直接读取前端绑定的原始数据(最稳定)
    tooltip的内容不会凭空生成,大概率提前绑定在土层区块的自定义属性(如data-desc、aria-label)或前端挂载的数据源中,可直接通过JS批量读取,完全不需要模拟悬浮操作,参考代码如下:
    # 执行JS批量读取所有土层的描述内容
    soil_desc_list = driver.execute_script('''
    // 替换为实际的土层颜色区块CSS选择器
    const soilBlocks = document.querySelectorAll('土层颜色区块选择器');
    return Array.from(soilBlocks).map(block => {
        // 可先在浏览器控制台确认内容实际存储的属性,常见存储位置如下:
        return block.dataset.description || block.getAttribute('aria-label') || block.__data__.desc || block.title;
    })
    ''')
    
    # 输出所有土层描述
    for desc in soil_desc_list:
        print(desc)
    
  • 方案3:强制tooltip常驻后批量抓取(无需逐个等待)
    直接通过JS修改tooltip的样式和事件逻辑,让它不会在鼠标移开后消失,触发所有区块悬浮后可直接批量读取内容,参考代码如下:
    # 修改tooltip属性强制常驻
    driver.execute_script('''
    const tooltip = document.getElementById('columns-tooltip');
    if(tooltip) {
        // 强制显示
        tooltip.style.display = 'block';
        tooltip.style.visibility = 'visible';
        tooltip.style.opacity = '1';
        tooltip.style.pointerEvents = 'auto';
        // 移除所有会隐藏tooltip的事件监听
        tooltip.onmouseout = null;
        tooltip.onmouseleave = null;
        document.removeEventListener('mouseout', () => tooltip.remove());
        document.removeEventListener('mousemove', () => tooltip.hide());
    }
    ''')
    
    # 之后悬浮所有土层区块,再统一读取所有生成的tooltip内容即可
    

提示:使用前请先通过浏览器F12开发者工具确认土层颜色区块的正确选择器,以及tooltip内容的实际存储位置,对应调整代码参数即可。
额外优化建议:现有代码中大量使用time.sleep()会受网络、设备性能影响导致稳定性差,建议统一替换为WebDriverWait显式等待对应元素加载完成,可大幅降低定位失败概率。

内容的提问来源于stack exchange,提问作者user14982193

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:27:01