【问题标题】:Expanding DOM lists to extract additional content with Python, Selenium, Beautiful Soup使用 Python、Selenium、Beautiful Soup 扩展 DOM 列表以提取其他内容
【发布时间】:2019-07-15 17:49:02
【问题描述】:

我希望从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 元素吗?

谢谢

【问题讨论】:

标签: python selenium beautifulsoup


【解决方案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())

【讨论】:

    【解决方案2】:

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

    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.
    

    【讨论】:

    • 感谢 Bitto,虽然这并没有完全符合我的要求,因为它没有扩展列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2018-01-31
    • 1970-01-01
    • 2011-01-09
    • 2013-01-09
    • 2020-05-04
    相关资源
    最近更新 更多