python - 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]
无济于事。
解决方案
这是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()
进口:
推荐阅读
- python - tkinter wraplength 单位是像素吗?
- python - 创建 Django 评论表单时出现 ValueError
- angular - 如何将我的“开始日期 + 10 天”修复为“结束日期”的最小值?
- azure-webjobs - 带有托管标识的 WebJobs 存储
- python-3.x - parser.add_argument 和 parser.parse_args() 与 jupyter
- flutter - 在 Flutter 的列中插入一行
- ios - 添加后 GMSMarker 未在地图上显示
- angular - 单击表格列后将焦点设置在输入字段上(Angular 7)
- python - 从 .txt 填充 pandas 数据帧,从多个 .txt 行读取单个数据帧行信息
- c# - 将对话历史从 MS bot 保存到 cosmos db