Python создание веб-страниц с драйвером Selenium chrome - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь получить количество публикаций учетной записи Instagram, которая находится в теге span, используя Python Selenium с Chrome драйвером это часть 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>

КОД PYTHON

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?

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Попробуйте

'//div[@id="react-root"]//ul/li//span[contains(., "publications")]/span'

Объяснение:

  • //div[@id="react-root"] << найдите элемент с идентификатором «act- root "</p>

  • //ul/li << внутри найденной реакции root найти элементы где угодно (<code>//), которые являются li элементами, которые являются потомками тега ul element

  • //span[contains(., "publications")] << в найденных <code>li элементах найти элементы span где угодно, которые содержат publications в виде текста
  • /span получить элементы span найденных span

Еще одна вещь: find_element_by_xpath возвращает первый соответствующий элемент. Если у вас есть более одной «публикации», вы можете собрать их все с помощью xpath выше (если хотите), если вы просто используете find_elements_by_xpath вместо find_element_by_xpath в селене.

Недавно я нашел эту страницу , которая является довольно хорошим чтением, чтобы начать освоение Xpath, проверьте его, если хотите узнать больше.

0 голосов
/ 21 марта 2020
//div[contains(id,"react-root")]/section/main/div/ul/li[1]/span/span

Используйте этот Xpath. Это может сработать. Я думаю, что вы сделали ошибку комы там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...