我正在尝试通过使用带有Chrome驱动程序的Python Selenium来获取跨度标签中的Instagram帐户的出版物数量,这是HTML代码的一部分:
<!doctype html>
<html lang="fr" class="js logged-in client-root js-focus-visible sDN5V">
<head>-</head>
<body class style>
<div id="react-root"> == 50
<form enctype^murtipart/form-data" method="POST" role="presentation">_</form>
<section class=”_9eogI E3X2T">
<div></div>
<main class="SCxLW o64aR " role=”main">
<div class=”v9tJq AAaSh VfzDr">
<header class=" HVbuG">_</header>
► <div class="-vDIg">_</div>
► <div class="_4bSq7">_</div>
▼ <ul class=” _3dEHb">
▼ <li class=” LH36I">
▼ <span class=" _81NM2">
<span class="g47SY 10XF2">6 588</span>
"publications"
</span>
</li>
蟒蛇代码
def get_publications_number(self, user):
self.nav_user(user)
sleep(16)
publication = self.driver.find_element_by_xpath('//div[contains(id,"react-root")]/section/main/div/ul/li[1]/span/span')
错误消息
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
{"method":"xpath","selector":"//div[contains(id,"react-root")]/section/main/div/ul/li[1]/span/span"}
(Session info: chrome=80.0.3987.149)
重要:
这个xpath是从Chrome元素检查器粘贴的,所以我认为这不是问题所在。当我输入self.driver.find_elements_by_xpath()
(带's')时,不会有错误,如果我这样做:
for value in publication:
print(value.text)
也不会有错误,但不会打印任何内容
所以问题是:
为什么我在 Xpath 存在时收到此错误?
试试
'//div[@id="react-root"]//ul/li//span[contains(., "publications")]/span'
解释:
//div[@id="react-root"]
<<找到 id 为 "react-root" 的元素//ul/li
<<在找到的 react 根目录内,在任何地方(//
)找到元素,这些元素是li
元素,这些元素是ul
标记元素的子元素//span[contains(., "publications")]
<<在找到的li
元素中,在包含publications
作为文本的任何地方找到 span 元素/span
获取找到的span
的跨度元素
还有一件事:find_element_by_xpath
返回匹配的第一个元素。如果您有多个"出版物",如果您只使用find_elements_by_xpath
而不是find_element_by_xpath
硒,您可以使用上面的 xpath 收集它们(如果您愿意)。
最近我发现这个页面是一个很好的阅读,可以开始掌握Xpath,如果您想了解更多信息,请查看它。
//div[contains(id,"react-root")]/section/main/div/ul/li[1]/span/span
使用此 Xpath。它可能会起作用。我想你在那里犯了一个昏迷错误。