假设我有以下 HTML:
<div class="class1">
<div class="some multiple classes here">
<div class="some multiple classes here">
<ul class="other classes">
<li>
<div class="random">some text</div>
<div class="random1">some text1</div>
<div class="random2">some tex2t</div>
</li>
<li>
<div class="random">some text3</div>
<div class="random1">some text4</div>
<div class="random2">some text5</div>
</li>
<li>
<div class="random">some text6</div>
<div class="random1">some text7</div>
<div class="random2">some text8</div>
</li>
<!-- here can appear more <li></li> elements -->
</ul>
</div>
</div>
</div>
现在,在python中,我创建了一个函数,该函数将来自div
的每个消息添加到列表中的li
标签中。所以我的列表将如下所示:
messages_list = ['some text some text1 some text2', 'some text3 some text4 some text5', 'and so on..']
我创建的函数使用 selenium webdriver 从 HTML 中获取内容,它看起来像这样:
def writeToChatTest(CHAT_URL):
mydriver.get(CHAT_URL)
message = "Some message to test"
xpaths = {
'textArea': "//*[@id='ipsTabs_elChatTabs_chatroom_panel']/div[1]/div[1]/div/div/div[1]/textarea",
'submitMessage': "//*[@id='ipsTabs_elChatTabs_chatroom_panel']/div[1]/div[1]/div/div/div[3]/button"
}
time.sleep(5)
rst_messages_list = []
lis = mydriver.find_elements_by_xpath('//ul[@class="ipsList_reset cChatContainer"]/li')
for li in lis:
rst_messages_list.append(li.text)
for unique_message in rst_messages_list:
if "word" in unique_message:
mydriver.find_element_by_xpath(xpaths['textArea']).clear()
mydriver.find_element_by_xpath(xpaths['textArea']).send_keys(unique_message[0] + ": " + message)
mydriver.find_element_by_xpath(xpaths['submitMessage']).click()
现在,我要问的问题是:有没有办法存储解析的最后一个li
标签并检查是否有一个新的(或更多(?此外,我怎样才能连续进行此检查?
问题是,一旦我解析了整个li
标签,我就无法检索新的标签(这是一个聊天,所以新的li
经常出现(。
每个元素都有一个唯一的 ID,因此您可以存储最后处理的 li,但它使事情复杂化。
我会像这样:
def writeToChatTest(CHAT_URL):
mydriver.get(CHAT_URL)
message = "Some message to test"
xpaths = {
'textArea': "//*[@id='ipsTabs_elChatTabs_chatroom_panel']/div[1]/div[1]/div/div/div[1]/textarea",
'submitMessage': "//*[@id='ipsTabs_elChatTabs_chatroom_panel']/div[1]/div[1]/div/div/div[3]/button"
}
parsed_messages = []
keepRunning = True
while keepRunning:
time.sleep(5)
lis = mydriver.find_elements_by_xpath('//ul[@class="ipsList_reset cChatContainer"]/li')
rst_messages_list = []
for li in lis:
if li.id() not in parsed_messages:
'''this will end nicely your test if the message 'end selenium test' is being sent in chat'''
if li.text == 'end selenium test':
keepRunning = False
rst_messages_list.append(li.text)
parsed_messages.append(li.id())
for unique_message in rst_messages_list:
if "word" in unique_message:
mydriver.find_element_by_xpath(xpaths['textArea']).clear()
mydriver.find_element_by_xpath(xpaths['textArea']).send_keys(unique_message[0] + ": " + message)
mydriver.find_element_by_xpath(xpaths['submitMessage']).click()