如何在Python中使用Selenium获得Chrome的第一个元素?
下面是我当前如何获取页面的第一个元素(或父元素):如何在Python中使用Selenium获得Chrome的第一个元素?,python,selenium,xpath,selenium-chromedriver,Python,Selenium,Xpath,Selenium Chromedriver,下面是我当前如何获取页面的第一个元素(或父元素): first\u element=page\u或\u parent。通过\u xpath('/*')查找\u element\u 我最近才遇到的问题(Chrome和84版)是,有时这会引发异常: selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*”} 再次调用相同的方法通常会检索元素,因此我假定文档树暂时不可用。但
first\u element=page\u或\u parent。通过\u xpath('/*')查找\u element\u
我最近才遇到的问题(Chrome和84版)是,有时这会引发异常:
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*”}
再次调用相同的方法通常会检索元素,因此我假定文档树暂时不可用。但是,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更好的方法吗?我曾考虑过通过xpath()查找元素,但如果元素太多,则可能会生成大量数据,运行速度会慢得多。目前我能想到的唯一解决方案是在异常发生时捕获异常,等待/睡眠,然后重试,但这感觉非常糟糕。您必须等待一段时间,以便页面能够完全加载,然后才能恢复脚本。或者您也可以使用
等待
,如下所示-
# Import
from selenium.webdriver.support import expected_conditions
wait = WebDriverWait(driver, 5)
wait.until(expected_conditions.presence_of_element_located((By.XPATH, "Your XPATH")))
当我遇到问题时,页面已满负荷;我确认文档准备状态为“完成”您是否尝试使用上述解决方案中提到的
预期条件?如果是,那么您将得到什么错误?同样的“无接触异常”?它会起作用的——这和我已经证实的睡觉是一样的。我认为这是Linux上Chrome的一个问题,因为它只是最近才出现在已经连续运行了2年的代码中。我不打算在helper函数中添加sleeps来获取第一个元素;所以现在我只是处理一个例外