如何解决如何使用Selenium和Python获取Chrome的第一个Element?
这是我当前要获取页面的第一个元素(或父元素)的操作:
first_element = page_or_parent.find_element_by_xpath('//*')
我最近才遇到的问题(Chrome和chromedriver版本84)是有时会引发异常:
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // *”}
再次调用相同的方法通常会检索该元素,因此我认为文档树暂时不可用。但是,Web驱动程序日志中没有任何奇怪的提示:
[1597164661.317][INFO]: [d88526be26bd6364d1b0ed2dab9d5733] COMMAND FindElement {
"using": "xpath","value": "//*"
}
[1597164661.317][INFO]: Waiting for pending navigations...
[1597164661.317][INFO]: Done waiting for pending navigations. Status: ok
[1597164661.418][INFO]: Waiting for pending navigations...
[1597164661.418][INFO]: Done waiting for pending navigations. Status: ok
[1597164661.418][INFO]: [d88526be26bd6364d1b0ed2dab9d5733] RESPONSE FindElement ERROR no such element: Unable to locate element: {"method":"xpath","selector":"//*"}
(Session info: chrome=84.0.4147.89)
然后我的主要问题是如何可靠地获得第一个元素?
有没有比我在使用XPath更好的方法?我想到了find_elements_by_xpath()
(复数),但是如果元素很多,那么很可能会生成大量数据,并且运行速度会慢得多。我目前能想到的唯一解决方案是捕获异常(如果发生),等待/睡眠,然后重试,但是感觉很脏。
解决方法
您必须等待一段时间,以便页面可以完全加载,然后才能继续执行脚本。否则,您也可以使用wait
,如下所示-
# Import
from selenium.webdriver.support import expected_conditions
wait = WebDriverWait(driver,5)
wait.until(expected_conditions.presence_of_element_located((By.XPATH,"Your XPATH")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。