我的页面返回JSON HTTP响应,其中包含id:14
在Selenium Python中是否有一种方法可以抓取它?我搜索了网络,但找不到任何解决方案。现在我想知道可能根本就不可能吗?虽然我可以从数据库中获取此ID,但我正在尝试避免这样做。请告诉我是否有任何解决方法。谢谢。
{"user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0"
}
但事实上,Firefox(和Chrome)为了创建可以显示的文档,将JSON包装在一些额外的HTML中。这是Firefox包装它的HTML,我可以通过评估表达式document.documentElement.innerHTML
在JavaScript控制台中看到:
<head><link rel="alternate stylesheet" type="text/css"
href="resource://gre-resources/plaintext.css" title="Wrap Long Lines"></head>
<body><pre>{"user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:42.0)
Gecko/20100101 Firefox/42.0"
}
</pre></body>
<body>
元素内部的文本,浏览器添加的所有额外结构都将被排除,纯粹的JSON将被返回。driver.find_element_by_tag_name('body').text
或者,如果您希望将其解析为Python数据结构:
import json
json.loads(driver.find_element_by_tag_name('body').text)
from bs4 import BeautifulSoup
import json
soup = BeautifulSoup(driver.page_source)
dict_from_json = json.loads(soup.find("body").text)
其他解决方案对我无效。我发现使用requests
的这个解决方案快速且简单:
import requests
requests.get(browser.current_url).json()
driver.page_source
查看页面的源代码。但如果响应的格式是纯 JSON,是否有必要使用 Selenium?或者你可以使用更轻量级的东西(例如requests
、urllib2
等)来代替吗? - Alex Woolford