簡體   English   中英

使用 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來跟蹤這個元素的變化。 每次元素更改時,我都希望將其打印出來。 使用文檔示例我寫了以下內容

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);
""")

這不會產生錯誤,但沒有任何反應。 它應該在控制台中連續打印“時間在滴答作響” ,對嗎?

在此處輸入圖片說明

我究竟做錯了什么? 是否還有可能在我的 python 腳本中打印輸出?

querySelectorAll 未上線。 它返回 dom 是什么的表示,並且您正在監視該快照。 您需要使用 getElementsByClassName 來掛鈎活動元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM