在Selenium中捕获流量

2 投票
3 回答
3603 浏览
提问于 2025-04-17 07:35

我正在使用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这个工具。

撰写回答