gpt4 book ai didi

python - Selenium + Python如何监听元素的变化

转载 作者:行者123 更新时间:2023-12-02 01:05:04 25 4
gpt4 key购买 nike

这个想法是创建一个机器人来从聊天中读取消息,所有消息都在 ul>li 中(不需要编写消息),例如

<ul class="message-list">
<li class="message">
Hello There
</li>
<li class="message">
Hello
</li>
</ul>

我从 Selenium 中找到了 expected_conditions 来处理元素是否存在/找到,但它总是正确的,因为有一条消息,但如果消息已经存在,我不想继续代码聊天,这不是主要想法。之后,我发现 EventFiringWebDriver、AbstractEventListener 却什么也没有。

from selenium import webdriver as wb
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener
from selenium.webdriver.common.keys import Keys


class MyListener(AbstractEventListener):
def before_navigate_to(self, url, driver):
print("Before navigate to %s" % url)

def after_navigate_to(self, url, driver):
print("After navigate to %s" % url)


driver = wb.Chrome('C:\python\selenium\chromedriver.exe')
wait = WebDriverWait(driver, 300)
# ef_driver = EventFiringWebDriver(driver, MyListener())
driver.implicitly_wait(15)
driver.get('https://socket.io/demos/chat/')
driver.switch_to.frame(driver.find_element_by_class_name('iframe-class'))
InputName = driver.find_element_by_xpath('/html/body/ul/li[2]/div/input')
InputName.send_keys('MyNameIsJeff')
InputName.send_keys(Keys.ENTER)


最佳答案

我认为你可以编写一个循环,并在循环内获取所需“ul”内“li”的数量。如果“li”的数量增加,则您有一条新消息。

# get list of li inside of ul
ulList = driver.find_elements_by_xpath("//ul[@class='message-list']")
lenOfLis = len(ulList)

# wait for new message...
while (true):

ulList = driver.find_elements_by_xpath("//ul[@class='message-list']")

if (len(ulList) > lenOfLis): # you have new message
for (i in range(len(ulList)-lenOfLis)):
yourLastMessage = ulList[-1-(i-1)]
# you can do whatever you want with your last messages
LenOfLis = len(ulList) # update length of ul


# wait 15 seconds
sleep(5)

关于python - Selenium + Python如何监听元素的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58660383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com