Selenium for Python - text_to_be_present用于部分文本匹配

时间:2017-10-12 13:41:03

标签: python selenium

我有一个div,其中包含特定搜索查询的结果。此div中包含的文本更改为单击按钮以转到下一页。

在此div中包含的文本中,还有相应的页面编号。单击按钮转到下一页后,结果仍然需要加载,所以我想让驱动程序等待内容加载。

因此,我想等到字符串“Page x”出现在div中,其中x对应于要加载的下一页的编号。

为此,我试过了:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

# Search page
driver.get('http://searchpage.com')

timeout = 120
current_page = 1

while True:
    try:
        # Wait until the results have been loaded
        WebDriverWait(driver, timeout).until(
            EC.text_to_be_present_in_element(
                locator=(By.ID, "SEARCHBASE"),
                text_="Page {:}".format(current_page)))

        # Click to go to the next page. This calls some javascript.
        driver.find_element_by_xpath('//a[@href="#"]').click

        current_page += 1
    except:
        driver.quit()

虽然这总是与文本不匹配。我在这里做错了什么?

只是检测页面中是否有任何改变也可以完成这项工作,但我还没有找到任何办法。

1 个答案:

答案 0 :(得分:0)

尝试应用以下解决方案等待部分文本匹配:

WebDriverWait(driver, timeout).until(lambda driver: "Page {:}".format(current_page) in driver.find_element(By.ID, "SEARCHBASE").text)