我有一个硒脚本(python),单击一个答复按钮以使该类anonemail出现。班级anonemail出现所需的时间各不相同。因此,我必须使用sleep直到元素出现。我想等到班级出现,而不要使用睡眠。我听说过等待命令,但是我不知道如何使用它们。
这是我到目前为止所拥有的:
browser.find_element_by_css_selector(".reply-button").click()
sleep(5)
email=browser.find_element_by_css_selector(".anonemail").get_attribute("value")
答案 0 :(得分:2)
根据最佳做法:
如果您的用例是验证任何元素的存在,则需要引起WebDriverWait,将expected_conditions设置为presence_of_element_located()
,这是期望值用于检查页面的DOM上是否存在元素。这并不一定意味着该元素是可见的。因此,有效的代码行将是:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
如果您的用例是要提取任何元素的任何属性,则需要引起WebDriverWait将expected_conditions设置为visibility_of_element_located(locator)
,这是一个期望用于检查元素是否存在于页面的DOM上并且可见。可见性意味着不仅显示元素,而且其高度和宽度都大于0。因此,在您的用例中,有效的代码行是:
email = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css"))).get_attribute("value")
如果您的用例是要在任何元素上调用 click()
,则需要诱使WebDriverWait将expected_conditions设置为element_to_be_clickable()
,是期望检查元素是否可见并已启用,以便您可以单击它。因此,在您的用例中,有效的代码行将是:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
您可以在以下位置找到一些详细的讨论:
答案 1 :(得分:0)
您可以使用等待。检查有关此链接的更多信息:selenium watis
在下面的示例中,我们使用可视性_of_element_located函数等待元素显示10秒。
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
答案 2 :(得分:0)
您可以使用implicitly_wait
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(15)
driver.get("http://url")
driver.find_element_by_id("id_of_element").click()
它等待直到元素被加载。
在您的情况下,实施方式是
browser.implicitly_wait(10)
browser.find_element_by_css_selector(".reply-button").click()
email=browser.find_element_by_css_selector(".anonemail").get_attribute("value")
答案 3 :(得分:0)
点击reply
按钮后,像下面一样使用.visibility_of_element_located
:
browser.find_element_by_css_selector(".reply-button").click()
#wait initialize, in seconds
wait = WebDriverWait(browser, 10)
email = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.anonemail'))).get_attribute("value")
print(email)
正在导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC