我试图用python selenium点击这一整天没有运气,尝试了几个选择器,xpath ..似乎没有什么对我有用。 这是我尝试点击的元素:
<span style="vertical-align: middle;">No</span>
这是我明显的非功能代码
driver.find_element_by_link_text("No")
答案 0 :(得分:7)
按链接文字搜索只有在span
是锚标记的子代时才会有所帮助,例如: <a><span style="vertical-align: middle;">No</span></a>
。当您尝试点击它时,我相信它真的在一个锚点内,但如果不是,我建议您使用XPath
只使用仅返回True
的谓词如果确切的文本内容匹配:
//span[text()="No"]
请注意,//span[contains(text(), "No")]
是非常不可靠的解决方案,因为它会返回带有文字的span
元素
等...
如果您获得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。