扩展DOM列表以使用Python,Selenium,Beautiful Soup提取其他内容

时间:2019-02-21 17:59:50

标签: python selenium beautifulsoup

我正在从a page中提取需要选择列表节点的内容。我已经使用python和Selenium检索了html页面。将页面源传递给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 :(得分:1)

您可以使用requests包以json格式获取所有信息。 下面是如何获取page的所有信息的示例:

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())

答案 1 :(得分:1)

没有得到输出的原因可能有多种

a)您单击的元素错误

b)在点击元素之前,您不必等待元素的加载

c)单击元素后,您不必等待内容加载

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.