Поиск поста + блок комментариев на инстаграм (селен, python, хромедрайвер) - PullRequest
0 голосов
/ 01 апреля 2020

Моя цель - найти размеры и местоположение на странице всех блоков Instagram (публикация + комментарий) пользователей, на которых я подписан. (большой прямоугольный блок страницы внизу с картинкой слева и комментариями справа)

Примером этого является:

  1. go до https://www.instagram.com/zuck/

  2. нажмите на первое сообщение

enter image description here

Я пытаюсь driver.find_element изображение с блоком комментариев в центре страницы выше, чтобы я мог найти размер и местоположение на странице блока. Я вижу xpath (//*[@id="react-root"]/section/main/div/div/article/div[1]), а класс div начинается с _97aPb, однако, когда я ссылаюсь sh или go на другого пользователя, эти изменения меняются.

Итак, я ищу альтернативный способ найти этот элемент. Я хочу иметь возможность перейти к следующему сообщению и найти блок (запись + комментарий) для всех сообщений.

1 Ответ

1 голос
/ 01 апреля 2020

Как получить статью:

В зависимости от того, насколько открыт пост, содержимое будет находиться под div с @role="dialog" или @id="react-root". Если вы открываете сообщение напрямую, диалоговое окно отсутствует, но если вы ищете '//div[@role="dialog" or @id="react-root"]//article, последним будет сообщение, которое вы ищете.

Итак:

article = driver.find_elements_by_xpath('//div[@role="dialog" or @id="react-root"]//article')[-1]

Как получить следующее изображение в статье:

next_image_arrow = article.find_element_by_xpath('.//*[contains(@class, "coreSpriteRightChevron")]')

Как выбрать следующую статью (доступно только при открытии статьи в модальном режиме) ):

next_article_button = driver.find_element_by_xpath('//a[contains(@class, "coreSpriteRightPaginationArrow")]')

Как получить комментарии:

all_comments = article.find_elements_by_xpath('./div/section[2]/following-sibling::div/ul/ul')

Указанный выше Xpath означает:

  • /div/section[2] << в узле статьи получить все узлы, которые имеют <em>прямой div дочерний узел, имеющий как минимум 2 прямых section тегированных дочерних узла , и выбрать второй
  • /following-sibling::div/ul/ul << принять найденное узлы раздела, и если за узлом раздела следует div, и у него есть прямые дочерние узлы ul, которые имеют прямые дочерние узлы ul, вернуть их </li>

Надеюсь, это ответ на вопрос.

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