鱼C论坛

 找回密码
 立即注册
查看: 2975|回复: 5

[已解决]selenium判断一个部分是否还有内容更新

[复制链接]
发表于 2023-5-19 18:09:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python
已经通过selenium.webdriver.Chrome类实例打开了该网站,并将驱动器装进了名为“driver”的变量。
有一个css selector为“div.markdown-body”的元素(唯一)里面会不断变动,0.1秒肯定会发生变化。(文本元素,在<p>标签里</p>)
最佳答案
2023-5-19 18:20:32
歌者文明清理员 发表于 2023-5-19 18:13
我使用了driver.implicitly_wait(30),不需要webdriverwait。更新你的代码

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

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

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

  6. # 循环检查元素的文本内容是否发生变化
  7. while True:
  8.     time.sleep(0.1)  # 每0.1秒检查一次
  9.     # 获取元素的新文本内容
  10.     new_content = element.text
  11.     # 判断新的文本内容是否与旧的文本内容不同
  12.     if new_content != previous_content:
  13.         print("元素发生了变化")
  14.         break
  15.     # 更新previous_content
  16.     previous_content = new_content
复制代码

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

使用道具 举报

发表于 2023-5-19 18:10:20 | 显示全部楼层
可以使用WebDriverWait类和expected_conditions模块来判断元素是否发生变化。以下是代码示例:
  1. from selenium.webdriver.support.ui import WebDriverWait
  2. from selenium.webdriver.support import expected_conditions as EC
  3. from selenium.webdriver.common.by import By
  4. # 等待10秒钟,每0.1秒钟检查一次元素是否发生变化
  5. wait = WebDriverWait(driver, 10, poll_frequency=0.1)
  6. # 获取要检查的元素
  7. element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.markdown-body")))
  8. # 获取元素的文本内容
  9. previous_content = element.text
  10. # 持续检查元素是否发生变化
  11. while True:
  12.     # 等待元素发生变化
  13.     wait.until(EC.staleness_of(element))
  14.    
  15.     # 获取元素的新文本内容
  16.     new_content = element.text
  17.    
  18.     # 判断元素的文本内容是否发生变化
  19.     if new_content != previous_content:
  20.         print("元素发生了变化")
  21.         break
  22.    
  23.     # 更新previous_content
  24.     previous_content = new_content
复制代码

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

使用道具 举报

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

我使用了driver.implicitly_wait(30),不需要webdriverwait。更新你的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-19 18:20:32 | 显示全部楼层    本楼为最佳答案   
歌者文明清理员 发表于 2023-5-19 18:13
我使用了driver.implicitly_wait(30),不需要webdriverwait。更新你的代码

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

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

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

  6. # 循环检查元素的文本内容是否发生变化
  7. while True:
  8.     time.sleep(0.1)  # 每0.1秒检查一次
  9.     # 获取元素的新文本内容
  10.     new_content = element.text
  11.     # 判断新的文本内容是否与旧的文本内容不同
  12.     if new_content != previous_content:
  13.         print("元素发生了变化")
  14.         break
  15.     # 更新previous_content
  16.     previous_content = new_content
复制代码

在这段代码中,我们首先获取了元素的初始文本内容,然后进入一个无限循环,在每次循环中,我们都会等待0.1秒(你说的元素每0.1秒都会发生变化),然后获取元素的新文本内容,如果新的文本内容与旧的文本内容不同,那么就认为元素发生了变化,打印出相应的信息,并跳出循环。否则,我们就更新旧的文本内容,然后继续下一次循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-19 21:08:29 | 显示全部楼层
isdkz 发表于 2023-5-19 18:20
如果你使用了隐式等待,那么可以用以下的方式来进行元素变化的检测:

Thank,还以为是bs4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-19 23:29:59 | 显示全部楼层
isdkz 发表于 2023-5-19 18:20
如果你使用了隐式等待,那么可以用以下的方式来进行元素变化的检测:

你猜这个“不断变动的内容”是什么
(不就是gpt吗)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 15:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表