硒:等待直到元素中不存在文本

时间:2020-08-16 07:06:41

标签: python python-3.x selenium selenium-webdriver

我想从包含多页文章列表的网页中提取文章标题。

我使用以下方法在首页上获得文章标题:

titles = browser.find_elements_by_xpath(r'path')
for i in range(len(titles)):
    titles_list.append(titles[i].text)

我使用以下内容导航到下一页:

next_page = browser.find_element_by_xpath(r'path')
next_page.click()

然后,我返回第一步(即获取文章标题)。


问题是,使用上述代码,有时我会两次获得页面的文章标题,有时会错过页面的文章标题。

我认为解决方案是等到第二步之后和重复第一步之前页面完全加载:我应该将第一页的唯一内容(例如第一篇文章的标题)存储在变量中(例如“ first_item”) ),我应该等到相应的元素不包含该文本。


我找到了问题的答案,但在使用ExpectedConditions.not的{​​{3}}中,但是以下代码(EC.not()部分)在Python中无效,并引发SyntaxError:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

next_page.click()
wait = WebDriverWait(browser, 10)
wait.until(EC.not(EC.text_to_be_present_in_element((By.XPATH, r'path'), first_item)))

如何等待直到Python中的元素中没有文本?

1 个答案:

答案 0 :(得分:1)

您可以这样等待

@{
    ICommonPageViewModel cvm = (ICommonPageViewModel)this.Model;
}
<html>
<head>
    <style type="text/css">
body {
}

body.foobar {
    background-image: url("@Url.Content("~/images/somepic.jpg")");
    background-position: 0 0;
    background-repeat: no-repeat;
}
    </style>
    @RenderSection("head")
</head>
<body class="@( cvm.BodyClass )">
    @RenderBody()
</body>

但是看起来很奇怪,但是它将等待直到找到该元素,否则循环将继续