如何获取原始页面源?

时间:2016-06-12 02:06:54

标签: python json selenium

考虑像https://groups.yahoo.com/api/v1/groups/concatenative/messages/300这样的网址。这是application/json回复:

enter image description here

我想从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响应。

1 个答案:

答案 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)