首页 > 解决方案 > Selenium WebDriver find_element_by_xpath 不适用于文本

问题描述

我正在尝试单击没有 ID 且没有单独班级的网页上的链接。唯一将其锁定为文本“会话”。

我努力了:

driver.find_element_by_xpath("//*[contains(text(),'Sessions')]");

driver.find_element_by_xpath("//*[text()='Sessions']");

两者都以“没有这样的元素”返回。

编辑:我也尝试过driver.find_element_by_link_text,但也没有用。

我试过使用完整的 xpath:

/html/body/div/div/div[1]/div/nav/a[3]

无济于事。

这是 HTML,“Sessions”是最后一个链接

标签: pythonseleniumselenium-webdriver

解决方案


这是link_Text因为它在锚标签之间,使用这个:

driver.find_element_by_link_text('Sessions').click()

或者

一种更好的方法是使用ExplicitWaits

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, 'Sessions')))
element.click()

如果您想要显式等待,则需要导入以下内容:

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

如果上面给了你NoSuchElementException,我可能会怀疑它在 iframe 中(参见屏幕截图第一个标签 - 我可以看到正文),如果它恰好是,那么在这种情况下,你需要先切换到 iframe 并继续使用这个网络元素。

代码

wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "iframe xpath here")))
wait.until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Sessions"))).click()

进口:


推荐阅读