捕获Selenium的流量

时间:2011-12-02 22:59:00

标签: python http post selenium

我在我发布的HTTP帖子请求上捕获Selenium对象上的网络流量。虽然返回的JSON字符串具有请求标头,但从不捕获邮件消息的正文(params)。

继承我的代码,

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请求,但没有身体(params),它不完整。任何建议都将不胜感激。

干杯, 甲

3 个答案:

答案 0 :(得分:1)

您无法通过Selenium获取请求或响应正文 - 它只捕获标题。如果您在Windows上运行,请尝试Fiddler2

答案 1 :(得分:1)

当selenium为您提供请求标头时,他们有信息来创建一个获取响应主体的PyCurl或urllib请求。

对我来说,这就像运行以下正则表达式一样简单地删除网址,然后使用 卷曲以获取它们。

urls = re.finditer('\n  "url":"(.*)",', sel.captureNetworkTraffic('json'))

使用正则表达式,因为一些响应嵌入了json导致json.loads爆炸:(。如果参数都在响应头而不是url中,还有一些额外的工作。

答案 2 :(得分:0)

注意:我可能需要有关您要完成的内容以及选择硒的原因的更多信息。

我唯一能想到的就是将tshark或类似的东西输出到你的python程序中。我想也有pcap阅读器,但我对这些没有经验。我简要地搜索了一个python网络监控api,但没有运气。