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

如何使用Selenium检测div内容更新及DOM节点变动

解决方案

以下两种实现方式均无需编写Selenium扩展,仅用Python原生Selenium接口即可实现,完全符合仅检测DOM变化、不对比数值的需求。


方案1:轻量轮询检测(实现最简单,适合绝大多数场景)

原理:每次页面更新都会替换父div下的第一个子节点,我们只需要比对Selenium为节点生成的内部唯一标识即可判断是否有新节点插入,不需要对比节点的实际内容。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("替换为你的目标页面地址")

# 定位目标父div,可根据实际情况修改定位方式和选择器
parent_div = driver.find_element(By.CSS_SELECTOR, "#替换为父div的实际选择器")
# 初始化记录第一个子节点的Selenium内部唯一ID
last_first_child_id = parent_div.find_elements(By.XPATH, "./div")[0].id

while True:
    current_first_child = parent_div.find_elements(By.XPATH, "./div")[0]
    # ID不一致说明有新节点插入
    if current_first_child.id != last_first_child_id:
        # 此处添加你的数值存储逻辑
        new_value = current_first_child.text
        print(f"检测到新值: {new_value}")
        # 更新记录的ID
        last_first_child_id = current_first_child.id
    # 轮询间隔可根据更新频率调整,100-500ms基本不会漏数据,性能损耗极小
    time.sleep(0.2)

优势:代码量极少,逻辑清晰易懂,不需要操作JS代码,适配所有场景。


方案2:事件驱动检测(无轮询,性能更优,适合高频更新场景)

原理:直接在页面注入一段极简的MutationObserver JS代码,通过Selenium的异步执行接口等待变化通知,全程不需要轮询,也不需要编写浏览器扩展。

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("替换为你的目标页面地址")

# 定位目标父div,可根据实际情况修改定位方式和选择器
parent_div = driver.find_element(By.CSS_SELECTOR, "#替换为父div的实际选择器")

while True:
    # 注入MutationObserver监听子节点变化,异步等待更新通知
    new_first_child = driver.execute_async_script("""
        const callback = arguments[arguments.length - 1];
        const observer = new MutationObserver((mutations) => {
            for (const mutation of mutations) {
                // 检测到子节点添加时返回新的第一个子节点
                if (mutation.addedNodes.length > 0) {
                    observer.disconnect();
                    callback(mutation.addedNodes[0]);
                    return;
                }
            }
        });
        observer.observe(arguments[0], { childList: true });
    """, parent_div)
    # 此处添加你的数值存储逻辑
    new_value = new_first_child.text
    print(f"检测到新值: {new_value}")

优势:完全基于事件触发,无轮询空转消耗,性能更高,不会漏掉任何更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:45:02