如何检查元素是否显示在下一页?

时间:2019-07-08 07:24:14

标签: python selenium-webdriver

我想检查Google提交按钮是否仍显示在下一页上。如果未显示,则提取一些文本,否则关闭浏览器。

我尝试用更少的秒来使用WebDriverWait元素,以便可以更快地获得结果。但是仍然需要3到4分钟才能引发异常。

driver.get("https://www.google.com/")
driver.maximize_window()

driver.find_element_by_name("q").send_keys("New york")
driver.find_element_by_name("q").send_keys(Keys.ENTER)
sleep(2)
print("System in 2 seconds sleep mode.")

before_Btn_Check_time = datetime.now()
print(before_Btn_Check_time)

wait = WebDriverWait(driver, 0)

try:
    ui.WebDriverWait(driver, 0).until(ec.presence_of_element_located(
        driver.find_element_by_xpath(
            "//*[@id='tsf']/div[2]/div/div[3]/center/input[1]"
        )
    ))

    sleep(1)
    print("System in 1 seconds sleep mode.")
    print("Still on the same page..!")
except NoSuchElementException as e:
    print("No Google Search button was found" + str(e))

如果该按钮未显示在下一页上,则预期的输出将在不到10秒的时间内得到错误消息。

1 个答案:

答案 0 :(得分:0)

使用implicitly_waitWebDriverWait可能会导致意外行为。

您将WebDriverWait超时设置为0,但是driver.find_element_by_xpath使用了implicitly_wait超时。在此超时之前将一直搜索该元素。

实际上,presence_of_element_located()应该接收By作为参数,而不是WebElement。正确的用法是

WebDriverWait(driver, 0).until(ec.presence_of_element_located((By.XPATH, "//*[@id='tsf']/div[2]/div/div[3]/center/input[1]")))

但是同样的道理,它将在内部搜索该元素。

请注意,implicitly_wait不会影响driver.get(),请使用driver.set_page_load_timeout()