我尝试单击一个编辑选项卡链接,它以无序列表中的超链接形式显示。
HTML 代码如下:
<li><a href="/node/2658/edit" data-drupal-link-system-path="node/2658/edit">Edit</a></li>
我一直尝试使用driver.find_element_by_link_text('Edit')来查找元素,但总是得到一个NoSuchElementException。
driver.find_element_by_link_text('Edit')
NoSuchElementException
我也使用了部分文本 fxn 及其 html 的所有变体,并收到了同样的错误。
我还发现以下 html 包含正确的链接:
<link rel="edit-form" href="/node/2658/edit" />
是否有一个 selenium 函数可以用来转到这个编辑页面?
您可以尝试几种方法来点击“编辑”链接或直接跳转到编辑页面。出现 NoSuchElementException 错误通常是因为该元素尚未加载或页面内容嵌套在 iframe 中。下面是一些可能有效的方法:
使用 WebDriverWait 显式等待元素加载后再点击,这样可以确保元素在页面上可用时再进行操作。
WebDriverWait
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待 "Edit" 链接可点击后进行点击 edit_link = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, "Edit")) ) edit_link.click()
如果 find_element_by_link_text() 或 find_element_by_partial_link_text() 无效,尝试使用 XPath 定位元素。
find_element_by_link_text()
find_element_by_partial_link_text()
edit_link = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, '/edit') and text()='Edit']")) ) edit_link.click()
这个 XPath 会定位到带有“/edit”部分的 href 和文本为 “Edit” 的 <a> 元素。
href
<a>
<link>
如果您不需要直接点击链接,可以从 <link rel="edit-form"> 标签中提取 URL 并直接导航到编辑页面。
<link rel="edit-form">
# 直接从 <link> 标签中获取编辑页面 URL edit_url = driver.find_element(By.XPATH, "//link[@rel='edit-form']").get_attribute("href") driver.get(edit_url)
如果该链接位于 iframe 中,则需要先切换到 iframe。
# 切换到 iframe(假设页面中只有一个 iframe) driver.switch_to.frame(driver.find_element(By.TAG_NAME, "iframe")) # 定位并点击 "Edit" 链接 edit_link = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, "Edit")) ) edit_link.click() # 切换回默认内容 driver.switch_to.default_content()
如果页面使用了 JavaScript 动态加载内容,可以等待整个页面加载完毕后再查找元素,或者使用 execute_script 方法直接调用页面上加载的函数(如果已知)。
execute_script
尝试这些方法应该能够帮助您找到并成功点击“编辑”链接。