我想用python通过Chrome调试协议获取网页资源内容,从这个页面method-getResourceContent我注意到这个方法:getResourceContent,需要params frameId和url,我想这个方法就是我需要的。 所以我做了件事:
1.启动chrome作为服务器:\chrome.exe--远程调试端口=9222
2.编写python测试代码:
# coding=utf-8
"""
chrome --remote-debugging api test
"""
import json
import requests
import websocket
import pdb
def send():
geturl = requests.get('http://localhost:9222/json')
websocketURL = json.loads(geturl.content)[0]['webSocketDebuggerUrl']
request = {}
request['id'] = 1
request['method'] = 'Page.navigate'
request['params'] = {"url": 'http://global.bing.com'}
ws = websocket.create_connection(websocketURL)
ws.send(json.dumps(request))
res = ws.recv()
ws.close()
print res
frameId = json.loads(res)['result']['frameId']
print frameId
geturl = requests.get('http://localhost:9222/json')
websocketURL = json.loads(geturl.content)[0]['webSocketDebuggerUrl']
req = {}
req['id'] = 1
req['method'] = 'Page.getResourceContent'
req['params'] = {"frameId":frameId,"url": 'http://global.bing.com'}
header = ["User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"]
pdb.set_trace()
ws = websocket.create_connection(websocketURL,header=header)
ws.send(json.dumps(req))
ress = ws.recv()
ws.close()
print ress
if __name__ == '__main__':
send()
3。页面导航干得好,我得到了这样的结果: {“id”:1,“result”:{“frameId”:“8504.2”}}
4.当我尝试的时候方法:getResourceContent,出现错误: {“error”:{“code”:-32000,“message”:“代理未启用。”},“id”:1}
我试着添加用户代理,但还是没用。在
谢谢。在
错误消息“Agent is not enabled”与HTTP
User-Agent
报头无关,而是指chrome中需要启用的代理才能检索页面内容。在术语“agent”有点误导性,因为protocol documentation表示需要启用才能调试它们的域(术语“agent”指的是Chrome内部实现的方式)
所以,问题是需要启用哪个域才能访问页面内容?事后看来,这是非常明显的:当我们在这个域中调用一个方法时,
Page
域需要被启用。不过,我是在绊倒了this example之后才发现的。在一旦我将
Page.enable
请求添加到脚本以激活Page
域后,错误消息就消失了。然而,我遇到了另外两个问题:Page.getResourceContent
无法检索资源,因为请求的资源http://global.bing.com/不可用。在在解决了这些问题之后,我能够检索页面内容。这是我的代码:
相关问题 更多 >
编程相关推荐