在Selenium中捕获流量
我正在使用Selenium捕获网络流量,主要是我发送的HTTP POST请求。虽然返回的JSON字符串中有请求头的信息,但POST消息的主体(参数)从来没有被捕获到。
这是我的代码:
host = "localhost"
port = "4444"
browser = r"*pifirefox"
sel = selenium(host, port, browser, url)
.
.
.....Submit action
postRequest = sel.captureNetworkTraffic('json')
postRequest包含:
[{
"statusCode":200,
"method":"POST",
"url":"http://.................",
"bytes":97567,
"start":"2011-12-02T17:42:04.719-0500",
"end":"2011-12-02T17:42:05.044-0500",
"timeInMillis":325,
"requestHeaders":[{
"name":"Host",
"value":"......................."
},{
"name":"User-Agent",
"value":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
},{
"name":"Accept",
"value":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
},{
"name":"Accept-Language",
"value":"en-us,en;q=0.5"
},{
"name":"Accept-Encoding",
"value":"gzip, deflate"
},{
"name":"Accept-Charset",
"value":"ISO-8859-1,utf-8;q=0.7,*;q=0.7"
},{
"name":"Proxy-Connection",
"value":"keep-alive"
},{
"name":"Referer",
"value":"...................."
},{
"name":"Cookie",
"value":"...................."
},{
"name":"X-Requested-With",
"value":"XMLHttpRequest"
},{
"name":"X-MicrosoftAjax",
"value":"Delta=true"
},{
"name":"Cache-Control",
"value":"no-cache, no-cache"
},{
"name":"Content-Type",
"value":"application/x-www-form-urlencoded; charset=utf-8"
},{
"name":"Content-Length",
"value":"10734"
},{
"name":"Pragma",
"value":"no-cache"
}],
"responseHeaders":[{
"name":"Date",
"value":"Fri, 02 Dec 2011 22:42:05 GMT"
},{
"name":"Server",
"value":"Microsoft-IIS/6.0"
},{
"name":"Cache-Control",
"value":"private"
},{
"name":"Content-Type",
"value":"text/plain; charset=utf-8"
},{
"name":"Content-Length",
"value":"97567"
},{
"name":"X-Powered-By",
"value":"ASP.NET"
},{
"name":"Via",
"value":"1.1 (jetty)"
},{
"name":"X-AspNet-Version",
"value":"4.0.30319"
}]
}]
我想模仿这个POST请求,但没有主体(参数),这样是不完整的。任何建议都会非常感谢。
谢谢,
A
3 个回答
0
注意:我可能需要更多关于你想要实现的目标以及你为什么选择selenium的信息。
我能想到的唯一方法就是把tshark或者类似工具的输出结果传递给你的Python程序。我想可能还有一些pcap文件的读取工具,但我对此没有经验。我简单搜索了一下Python的网络监控接口,但没有找到合适的。
1
当你使用selenium时,它会给你请求头的信息,这些信息可以用来制作一个PyCurl或urllib请求,从而获取响应内容。
对我来说,这个过程很简单,只需要运行以下的正则表达式来提取出网址,然后用curl去获取这些网址的内容。
urls = re.finditer('\n "url":"(.*)",', sel.captureNetworkTraffic('json'))
之所以使用正则表达式,是因为有些响应中嵌入了json数据,这会导致json.loads出错 :(. 如果参数都在响应头中而不是网址里,那么处理起来会稍微复杂一些。
1
你不能通过Selenium获取请求或响应的内容,它只能捕捉到请求头。 如果你在Windows上,可以试试Fiddler2这个工具。