我正在尝试查找以下元素:
<span class="btn btn-default" onclick="close_terms_window();" style="" xpath="1">Next</span>
使用硒webdriver。但我收到此消息:
消息:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // div [@ id ='terms-modal'] / div // [@ id ='acceptterms'] // [@ onclick =“ close_terms_window();”]“} (会议信息:chrome = 74.0.3729.131) (驱动程序信息:chromedriver = 2.46.628402(536cd7adbad73a3783fdc2cab92ab2ba7ec361e1),platform = Windows NT 10.0.17134 x86_64)
我使用了以下方法:
方法1:
time.sleep(4)
element_term = driver.find_element_by_xpath("//div[@id='terms-modal']/div//* [@id='acceptterms']//span[@onclick=\"close_terms_window();\"]")
方法2:
element_term = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,"//span[contains(@class,'btn') and contains(@class,'btn-default)]")))`
方法3:
time.sleep(1)
element_term = driver.find_element_by_xpath("//div[@id='terms-modal']/div//*[@id='acceptterms']//*[@onclick=\"close_terms_window();\"]")
方法4:
使用CSS选择器:
time.sleep(4)
driver.find_element_by_css_selector("span.btn btn-default")
element_term = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,"//span[contains(@class,'btn') and contains(@class,'btn-default)]")))
答案 0 :(得分:0)
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='btn btn-default')))
预期条件:
这些是自动化Web应用程序时经常使用的一些常见条件。
Selenium Python绑定提供了一些方便的方法,因此您不必自己编写Expected_condition类或为它们创建自己的实用程序包。
答案 1 :(得分:0)
由于该元素位于模态对话框中,以查找并单击该元素,因此必须为element_to_be_clickable()
引入 WebDriverWait ,您可以使用其中一个以下解决方案:
使用CSS_SELECTOR
:
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.btn.btn-default[onclick^='close_terms_window']")))
使用XPATH
:
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='btn btn-default' and starts-with(@onclick,'close_terms_window')][contains(., 'Next')]")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC