这个想法是创建一个机器人来读取聊天消息,所有消息都在一个ul>li
(不必写消息),例如
<ul class="message-list">
<li class="message">
Hello There
</li>
<li class="message">
Hello
</li>
</ul>
I found expected_conditions
来自Selenium,处理元素是否存在/找到,但它总是正确的,因为有一条消息,但如果消息已在聊天中,我不想继续代码,这不是主要思想。然后我发现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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)