如果标签已经被解析并与 python 中的较新标签连接,是否可以跳过标签?



假设我有以下 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()

最新更新