歌者文明清理员 发表于 2023-5-19 18:09:20

selenium判断一个部分是否还有内容更新

python
已经通过selenium.webdriver.Chrome类实例打开了该网站,并将驱动器装进了名为“driver”的变量。
有一个css selector为“div.markdown-body”的元素(唯一)里面会不断变动,0.1秒肯定会发生变化。(文本元素,在<p>标签里</p>)

isdkz 发表于 2023-5-19 18:10:20

可以使用WebDriverWait类和expected_conditions模块来判断元素是否发生变化。以下是代码示例:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待10秒钟,每0.1秒钟检查一次元素是否发生变化
wait = WebDriverWait(driver, 10, poll_frequency=0.1)

# 获取要检查的元素
element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.markdown-body")))

# 获取元素的文本内容
previous_content = element.text

# 持续检查元素是否发生变化
while True:
    # 等待元素发生变化
    wait.until(EC.staleness_of(element))
   
    # 获取元素的新文本内容
    new_content = element.text
   
    # 判断元素的文本内容是否发生变化
    if new_content != previous_content:
      print("元素发生了变化")
      break
   
    # 更新previous_content
    previous_content = new_content


在上面的代码中,我们首先使用WebDriverWait类等待元素的出现,并获取元素的文本内容。然后我们使用一个while循环来持续检查元素是否发生变化。在每次循环中,我们使用wait.until(EC.staleness_of(element))等待元素发生变化,然后获取元素的新文本内容,并与之前的文本内容进行比较。如果发现文本内容发生了变化,就打印出相应的信息并跳出循环。否则,我们更新previous_content的值,然后继续循环等待元素发生变化。

歌者文明清理员 发表于 2023-5-19 18:13:43

isdkz 发表于 2023-5-19 18:10
可以使用WebDriverWait类和expected_conditions模块来判断元素是否发生变化。以下是代码示例:



我使用了driver.implicitly_wait(30),不需要webdriverwait。更新你的代码

isdkz 发表于 2023-5-19 18:20:32

歌者文明清理员 发表于 2023-5-19 18:13
我使用了driver.implicitly_wait(30),不需要webdriverwait。更新你的代码

如果你使用了隐式等待,那么可以用以下的方式来进行元素变化的检测:

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

# 获取元素的初始文本内容
element = driver.find_element(By.CSS_SELECTOR, "div.markdown-body")
previous_content = element.text

# 循环检查元素的文本内容是否发生变化
while True:
    time.sleep(0.1)# 每0.1秒检查一次
    # 获取元素的新文本内容
    new_content = element.text
    # 判断新的文本内容是否与旧的文本内容不同
    if new_content != previous_content:
      print("元素发生了变化")
      break
    # 更新previous_content
    previous_content = new_content

在这段代码中,我们首先获取了元素的初始文本内容,然后进入一个无限循环,在每次循环中,我们都会等待0.1秒(你说的元素每0.1秒都会发生变化),然后获取元素的新文本内容,如果新的文本内容与旧的文本内容不同,那么就认为元素发生了变化,打印出相应的信息,并跳出循环。否则,我们就更新旧的文本内容,然后继续下一次循环。

歌者文明清理员 发表于 2023-5-19 21:08:29

isdkz 发表于 2023-5-19 18:20
如果你使用了隐式等待,那么可以用以下的方式来进行元素变化的检测:




Thank,还以为是bs4{:10_277:}

歌者文明清理员 发表于 2023-5-19 23:29:59

isdkz 发表于 2023-5-19 18:20
如果你使用了隐式等待,那么可以用以下的方式来进行元素变化的检测:




你猜这个“不断变动的内容”是什么{:10_256:}
(不就是gpt吗)
页: [1]
查看完整版本: selenium判断一个部分是否还有内容更新