【发布时间】:2021-03-22 18:40:13
【问题描述】:
我在 Python 上使用 Selenium 时遇到问题。这是整个错误代码:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/div[3]/div[2]/form[1]/input"}
(Session info: MicrosoftEdge=89.0.774.57)
这是我要访问的元素:
事实是,当我单击该元素并复制完整的 XPath 时,这就是我所拥有的:
/html/body/div/div[3]/div[2]/form[1]/input
但由于某些原因它不起作用...我几乎尝试了所有方法:名称、值、普通 XPath(顺便说一下是//*[@id="content"]/form[1]/input)
我正在使用 Edge Chromium,我使用 Python 3.9.0,这是我正在使用的代码(在变量 telechargerReleve 之前一切正常:
from selenium import webdriver
driver = webdriver.Edge(executable_path="automation_drivers/msedgedriver.exe")
driver.get("https://login.unice.fr/login?service=https://ent.unice.fr/uPortal/Login")
usernameElement = driver.find_element_by_id("username")
passwordElement = driver.find_element_by_id("password")
usernameElement.send_keys("myUsername")
passwordElement.send_keys("myPassword")
login = driver.find_element_by_name("submit")
login.click()
mesInfos = driver.find_element_by_xpath("/html/body/table[2]/tbody/tr/td[3]/table/tbody/tr[2]/td[3]/a")
mesInfos.click()
intracursus = driver.find_element_by_xpath("/html/body/table[3]/tbody/tr/td[2]/span[2]/a[3]")
intracursus.click()
telechargerReleve = driver.find_element_by_xpath("/html/body/div/div[3]/div[2]/form[1]/input")
telechargerReleve.click()
提前谢谢你, 肉酱。
PS:有些文本可能是法语,所以如果您需要翻译或其他内容,请随时问我!
【问题讨论】:
-
使用更有针对性的 XPATH。也许通过按钮的文本。 (这也是用户会发现它的方式......)似乎它是第一种形式......但基于路径的xpath很脆弱。根据网站的工作方式,它可能还需要 webdriverwait...
-
所有基于 xpath 的定位器都不脆弱。这是一个谬误。但是有些 xpath 可能很脆弱。
-
假设您想要在 HTML 中突出显示的元素,您应该使用按名称查找元素。它可以使用。让自己更轻松
-
您似乎在找到该元素之前单击了一个标签。使用等待。
-
对 HTML 的任何更改(开发或 Javascript 更新)都可以更改您的 web 元素的路径。由于您在那里使用的是纯基于路径的 XPATH,因此它很脆弱。您最终可能会使用另一个 web 元素,因为您想要的路径已更改。所以它不仅脆弱而且不针对 DOM 的特定元素,而是可以随着更新而改变的路径。
标签: python python-3.x selenium selenium-webdriver webdriver