如何使用python selenium单击span元素

时间:2017-06-20 23:17:19

标签: python selenium xpath

我试图用python selenium点击这一整天没有运气,尝试了几个选择器,xpath ..似乎没有什么对我有用。 这是我尝试点击的元素:

<span style="vertical-align: middle;">No</span>

这是我明显的非功能代码

driver.find_element_by_link_text("No")

2 个答案:

答案 0 :(得分:7)

按链接文字搜索只有在span是锚标记的子代时才会有所帮助,例如: <a><span style="vertical-align: middle;">No</span></a>。当您尝试点击它时,我相信它真的在一个锚点内,但如果不是,我建议您使用XPath只使用仅返回True的谓词如果确切的文本内容匹配:

//span[text()="No"]

请注意,//span[contains(text(), "No")]是非常不可靠的解决方案,因为它会返回带有文字的span元素

  • &#34; 11月下雨&#34;
  • &#34;是。否&#34;
  • &#34;我认为查克诺里斯可以帮助你&#34;

等...

如果您获得NoSuchElementException,则可能需要等待元素显示在DOM中:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait

wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='No']"))).click()

答案 1 :(得分:0)

我不知道是否有其他元素或任何东西。 您可以使用css选择器选择范围:

driver.find_element_by_css_selector('span').click()

我在考虑这是代码中唯一的span标记。可能不是。

作为一种非常“霰弹枪”的解决方案。您可以单击每个span标记:

for element in driver.find_elements_by_css_selector('span'):
    element.click()

不是一个完美的解决方案,但它可能是一个起点。

其他问题。页面是否动态加载内容?像xhr和东西?也许你可能需要让硒等一下。 要让selenium等待,你可以使用:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait_time = 60 # a very long wait time
element = WebDriverWait(driver, wait_time).\
    until(EC.element_to_be_clickable((By.LINK_TEXT, 'No')))
element.click()

或者您可以使用By.CSS_SELECTOR代替By.LINK_TEXT。因此,您可以使用更具体的规则来匹配或选择其他任何选择方法here