【问题标题】:How to click on span element with python selenium如何使用 python selenium 单击 span 元素
【发布时间】:2017-11-23 16:03:41
【问题描述】:

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

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

这是我明显的非函数代码

driver.find_element_by_link_text("No")

【问题讨论】:

  • find_element_by_link_text ?这是一个链接吗?
  • 不,可能不是,我只是在尝试一切。

标签: python selenium xpath


【解决方案1】:

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

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

我认为这是您代码中唯一的 span 标签。应该不是吧。

作为一个非常“霰弹枪”的解决方案。您可以点击每个跨度标签:

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

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

其他问题。页面是否动态加载内容?像 xhr 之类的?也许您可能需要让 selenium 稍等一下。 要让 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

【讨论】:

  • 这很奇怪,当我使用检查元素时我看到了该元素,但是当我检查整个页面源时它不存在..但我没有看到任何 iframe 或类似的东西。
  • @user3281831 它是动态加载的。不需要 iframe。只需一个非常简单和简短的 javascript 就可以做到这一点。我正在编辑我的答案。
【解决方案2】:

仅当您的 span 是锚标记的子标记时,按链接文本搜索才能为您提供帮助,例如&lt;a&gt;&lt;span style="vertical-align: middle;"&gt;No&lt;/span&gt;&lt;/a&gt;。当您尝试单击它时,我相信它确实位于锚点内,但如果不是,我建议您使用 XPath 和谓词,仅当确切的文本内容匹配时才返回 True

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

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

  • “十一月的雨”
  • “是的。没有。”
  • “我认为 Chuck Norris 可以帮助你”

等等……

如果你得到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()

【讨论】:

  • 哇,谢谢你是国王!两天后,我尝试了一切,这终于是一个解决方案!
  • 经过 2 小时的努力找到了这个解决方案。也感谢我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2022-01-06
相关资源
最近更新 更多