鱼C论坛

 找回密码
 立即注册
查看: 2080|回复: 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。更新你的代码

如果你使用了隐式等待,那么可以用以下的方式来进行元素变化的检测:
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秒都会发生变化),然后获取元素的新文本内容,如果新的文本内容与旧的文本内容不同,那么就认为元素发生了变化,打印出相应的信息,并跳出循环。否则,我们就更新旧的文本内容,然后继续下一次循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-19 18:10:20 | 显示全部楼层
可以使用WebDriverWait类和expected_conditions模块来判断元素是否发生变化。以下是代码示例:
from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom 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的值,然后继续循环等待元素发生变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我使用了driver.implicitly_wait(30),不需要webdriverwait。更新你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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秒都会发生变化),然后获取元素的新文本内容,如果新的文本内容与旧的文本内容不同,那么就认为元素发生了变化,打印出相应的信息,并跳出循环。否则,我们就更新旧的文本内容,然后继续下一次循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

Thank,还以为是bs4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你猜这个“不断变动的内容”是什么
(不就是gpt吗)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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