我无法理解这两个代码块之间的区别。发送点击在 webdriverwait 和 find_elements 中都可以工作。
代码1
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 45)
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC"))).click()
代码2
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 45)
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC")))
driver.find_element(By.LINK_TEXT,"ABC").click()
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC")))
这将返回一个 webElement,您可以调用可用于 webElement 的方法,即
click()
、send_keys()
、clear()
等。
driver.find_element(By.LINK_TEXT,"ABC")
这也做了同样的事情,即:它将返回一个 webElement。
区别:两者之间的主要区别:
WebDriverWait
是Selenium中的显式等待,这意味着如果在DOM中找不到元素,那么它将在500ms
之后重试,即再次.5 sec
,直到45 sec
(因为您在构造函数调用中定义了 45 秒)。如果在此时间内找到,它将返回 webElement,否则它将引发 timeOutException
。
另一方面,
driver.find_element
将尝试立即查找该元素,如果找到,它将返回webElement,如果没有,将引发异常NoSuchElement
或其他一些。
您可以在此处阅读有关显式等待的更多信息