如何使用Selenium和Python找到span元素

时间:2019-05-03 03:13:53

标签: python-3.x selenium xpath css-selectors webdriverwait

我正在尝试查找以下元素:

<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)]")))

源代码快照:https://i.stack.imgur.com/tib3V.png

2 个答案:

答案 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类或为它们创建自己的实用程序包。

  • title_is
  • title_contains
  • 存在元素的位置
  • visibility_of_element_located
  • visibility_of
  • 存在的所有要素
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located
  • element_to_be_clickable

答案 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