我正在从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元素吗?
谢谢
答案 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.