我想检查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秒的时间内得到错误消息。
答案 0 :(得分:0)
使用implicitly_wait
和WebDriverWait
可能会导致意外行为。
您将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()
。