使用 MutationObserver Python 跟踪 DOM 元素内的变化

Track changes within DOM element with MutationObserver Python

我找到了一个推飞镖比分的网站。每次发布新乐谱时,我都希望收到通知。

import time
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

URL = 'https://live.dartsdata.com/'
driver = webdriver.Chrome('/Users/hjam/downloads/chromedriver')
driver.get(URL)

time.sleep(1)
matches = driver.find_elements(By.XPATH, ".//*[@class='sr-match__wrapper srt-base-1 sr-ml-list__match']")
matches[0].click()

我想检索比赛开始前的秒数(atm 没有现场比赛,但想法是一样的)。我看到这个数据点位于

seconds = driver.find_elements(By.XPATH, ".//*[@class='sr-lmt-0-ms-countdown__time srt-primary-7 srm-large']")[-1]

现在我想用一个MutationObserver来跟踪这个元素的变化。每次元素更改时,我都希望将其打印出来。使用 docs 的例子,我写了下面的

driver.execute_script("""
const targetNode = document.querySelector('#content1 > div.sr-lmt-plus__comp.srm-double.srm-isLmt > div > div > div > div > div > div > div.sr-lmt-wrap > div > div.sr-lmt-22-state > div.sr-bb.sr-lmt-matchstatus.sr-ltr.sr-lmt-matchstatus--small > div > div > div.sr-lmt-matchstatus__slider.sr-slider-flex__slider > div > div > div.sr-lmt-setsports-ms-matchstatus__row.sr-lmt-setsports-ms-matchstatus__countdown-wrapper > div > div.sr-lmt-0-ms-countdown__row > div:nth-child(4)');
const config = { attributes: true, childList: true, subtree: true };

const callback = function(mutationsList, observer) {
    for(const mutation of mutationsList) {
            console.log('Time is ticking');
        }
    };
const observer = new MutationObserver(callback);
observer.observe(targetNode, config);
""")

这不会产生任何错误,但什么也没有发生。它应该在控制台中连续打印 'time is ticking' 对吗?

我做错了什么?是否也有可能在我的 python-script 中打印输出?

querySelectorAll 未上线。它是 returns 表示 dom 是什么,您正在监视该快照。您需要使用 getElementsByClassName 挂钩到活动元素。