Selenium получает комментарии от постов - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь получить текст с веб-страницы, помеченной как SPAN в КЛАССЕ.Я пробовал это с Xpath, но это не сработает, потому что тег встречается несколько раз.Я использую Jupyter Notebook для написания программы.

Вот пример из Instagram:

<div class="C4VMK">
<a class="FPmhX notranslate TlrDj" title="henkbrinkman1994" 
href="/henkbrinkman1994/">henkbrinkman1994</a>
<span>Awesome!</span>
</div>

В этом случае я хочу получить текст «Удивительно!»в теге SPAN.Как я могу сделать это в Selenium Python?

Пример

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Требуемый элемент выглядит как динамический элемент, поэтому чтобы получить комментарий с текстом Awesome! , вам нужно вызвать WebDriverWait , чтобы элемент был видимым и вы можете использовать любое из следующих решений:

  • XPATH#1:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@class,'notranslate') and contains(.,'henkbrinkman1994')]//following::span[1]"))).get_attribute("innerHTML"))
    
  • XPATH#2:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@class,'notranslate') and @title='henkbrinkman1994']//following::span[1]"))).get_attribute("innerHTML"))
    

Примечание : необходимо добавить следующие операции импорта:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 26 сентября 2018

Вы можете попробовать альтернативную стратегию локатора, потому что она не на 100% уверена, что ваш xpath будет работать каждый раз.

Использовать ниже css Selector

div[class='C4VMK'] span

ИЛИ

.C4VMK span

Убедитесь, что ваш элемент был загружен и достаточно видим, если нет, тогда попробуйте другие условия ExplicitWait, чтобы заставить их работать.

0 голосов
/ 26 сентября 2018

У меня нет учетной записи Instagram, и у меня нет разрешения использовать автоматизацию для сбора информации с их сайта (см. Условия предоставления услуг), поэтому я не могу проверить это.Идея состоит в том, что вы использовали бы find_element_by_xpath (), чтобы найти конкретный пост (или find_elements_by_xpath (), чтобы получить их все).

my_post = driver.find_element_by_xpath('/xpath/to/a/post')

Затем для каждого поста используйте один и тот же метод, чтобы получить список комментариев.:

post_comments = my_post.find_elements_by_xpath('./relative/xpath/to/comments')

Затем вы можете просмотреть объекты в post_comments, чтобы получить текст.

for post in post_comments:
    print post.text

[возможно, есть более эффективные способы сделать это, но это поможет вам начать]

...