Python webscraping with Selenium chrome driver



我正在尝试通过使用带有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。它可能会起作用。我想你在那里犯了一个昏迷错误。

相关内容

  • 没有找到相关文章