Selenium:检查AJAX更改的更好方法,而不是无限循环

2024-09-30 08:20:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用以下代码检查Facebook消息中是否有新消息:

def waitForNextMessage():
    messageList=driver.find_elements_by_css_selector('.null')
    message=''
    while True:
        driver.implicitly_wait(10)
        element = driver.find_elements_by_css_selector('.null')
        if not(element == messageList):
            message=element[-1].find_elements_by_css_selector("*")[0].text
            print(message)
            break

基本上,在开始时,我列出了类.null(消息框)的所有元素,然后在一个无限循环中再次创建该列表并检查它是否不同。如果是,则表示新消息已到达。在

有没有更好的方法,希望没有无限循环?在


Tags: 代码消息messagebyfacebookdefdriverelements
1条回答
网友
1楼 · 发布于 2024-09-30 08:20:40

可以使用explicit wait等待messagesnull元素消失

messageList = driver.find_elements_by_css_selector('.null')
try:
    WebDriverWait(driver, 60).until(expected_conditions.staleness_of(messageList[1]))
    message = element[1].find_elements_by_css_selector("*")[0].text
    print(message)
except TimeoutException:
    # no new message

这将等待60秒,直到messageList中的第二项从DOM中消失,即您有了新消息。如果有新消息,代码将继续打印消息,否则将出现TimeoutException。在

Edit

要在一定时间内运行此程序,您可以设置计时器

^{pr2}$

要在其他测试之外连续运行此测试,可以在线程中运行waitForNextMessage()。在

Edit 2

expected_conditions.staleness_of()是一个不附加到DOM的元素的期望值。您可以找到更多期望的条件here

相关问题 更多 >

    热门问题