Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用Selenium获得Chrome的第一个元素?_Python_Selenium_Xpath_Selenium Chromedriver - Fatal编程技术网

如何在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来获取第一个元素;所以现在我只是处理一个例外