繁体   English   中英

如果已经解析了标签并与python中的新标签合并,则可以跳过标签?

[英]It's possible to skip tags if they have been already parsed and coninue with the newer ones in 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM