考虑像https://groups.yahoo.com/api/v1/groups/concatenative/messages/300这样的网址。这是application/json
回复:
我想从Selenium访问JSON。 (我正在使用Selenium,因为我需要访问私人组,我不想处理如何通过mechanicalsoup或类似的东西登录。)但是,获取页面源给了我的方式浏览器呈现的是JSON ,而不是JSON本身:
>>> self.br.driver.page_source
'<html xmlns="http://www.w3.org/1999/xhtml"><head><link title="Wrap Long Lines" href="resource://gre-resources/plaintext.css" type="text/css" rel="alternate stylesheet" /></head><body><pre>{"ygPerms":{"resourceCapabilityList":[{"resourceType":"GROUP","capabilities":[{"name":"READ"},{"name":"JOIN"}]},{"resourceType":"PHOTO","capabilities":[]},{"resourceType":"FILE","capabilities":[]},{"resource ...
请注意,JSON包含在一些HTML和pre元素中。
如何直接获得JSON?获取<pre>
中<body>
的内容似乎很麻烦,因为我不知道浏览器将来如何选择代表此JSON响应。
答案 0 :(得分:1)
您可以发送AJAX直接使用JSExecutor获取json。见下面的例子:
driver.get("https://groups.yahoo.com/api/v1/groups/concatenative/messages/300")
driver.set_script_timeout(10)
response = driver.execute_async_script(
"console.log('Start AJAX');" +
"var callback = arguments[arguments.length - 1];" +
"var http = new XMLHttpRequest();" +
"var url = '/api/v1/groups/concatenative/messages/300';" +
"http.open('GET', url, true);" +
"http.onreadystatechange = function() {" +
" if(http.readyState == 4) {" +
" callback(http.responseText);" +
" };" +
"};" +
"http.send();")
print(response)