Расширение списков DOM для извлечения дополнительного контента с помощью Python, Selenium, Beautiful Soup - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу извлечь содержимое из страницы , для которой требуется выбрать узел списка.Я получил страницу HTML, используя Python и Selenium.Передав исходный код страницы в BS4, я могу разобрать содержимое, которое я ищу, используя

   open_li = soup.select('div#tree ul.jstree-container-ul li')

Каждый возвращенный элемент списка имеет

      aria-expanded = "false"  and class="jstree-node jstree-closed"

При просмотре проверяющего элемента, содержимое называетсякогда эти переменные установлены на

   aria-expanded = "true"  and class="jstree-node jstree-open"

Я пытался использовать метод .click для содержимого

  driver.find_element_by_id('tree').click()

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

Кто-нибудь знает, как изменить элементы aria-expand на странице перед возвратом содержимого?

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Может быть несколько причин, чтобы не получить вывод

a) Вы нажимаете на неправильный элемент

b) Вы не ждете загрузки элемента, прежде чем щелкнуть по нему

в) Вы не ожидаете загрузки контента после нажатия на элемент

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('/path/to/chromedriver')
url="https://app.updateimpact.com/treeof/org.apache.commons/commons-lang3/3.7"
driver.get(url)
element=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,'//*[@id="org.apache.commons:commons-lang3:3.7:jar_anchor"]/span')))
element.click()
element=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,'//*[@id="tree-detail"]/div[2]/span[1]')))
print(driver.find_element_by_xpath('//*[@id="detail_div"]').text)

Вывод

org.apache.commons:commons-lang3:3.7:jar (back)
Project module (browse only dependencies of this module)
Group id org.apache.commons
Artifact id commons-lang3
Version 3.7
Type jar
This dependency isn't a dependency of any other dependencies.
0 голосов
/ 21 февраля 2019

Вы можете использовать пакет requests для получения всей информации в формате json.Вот пример того, как вы можете получить всю информацию на странице :

import requests

if __name__ == '__main__':
    url = "https://app.updateimpact.com/api/singleArtifact?artifactId=commons-lang3&groupId=org.apache.commons&version=3.7"

    req_params = requests.get(url).json()
    response = requests.get(
        'https://app.updateimpact.com/api/builds/%s/%s' % (req_params["userIdStr"], req_params["buildId"]))
    print(response.json())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...