如何监控Phantom.js中的WebSocket通信?

TN.*_*TN. 4 javascript websocket phantomjs

Phantom.js文档显示了如何监视HTTP通信:http://phantomjs.org/network-monitoring.html

但是,它不适用于WebSockets.如何监控Phantom.js中的WebSocket通信?

Art*_* B. 9

PhantomJS 1.x不支持WebSockets 1,因此您无法监控它们.如果页面使用了一些备用的的WebSockets,那么page.onResourceRequestedpage.onResourceReceived可用于记录信息的元数据.PhantomJS不会以任何方式公开发送的实际数据.

WebSockets在PhantomJS 2中正常工作.由于不需要回退,因此无法观察这些事件的流量.上面提到的事件处理程序没有显示任何内容.查看消息的唯一方法WebSocket是尽早代理对象:

page.onInitialized = function(){
    page.evaluate(function(){
        (function(w){
            var oldWS = w.WebSocket;
            w.WebSocket = function(uri){
                this.ws = new oldWS(uri);
                ...
            };
            w.WebSocket.prototype.send = function(msg){
                w.callPhantom({type: "ws", sent: "msg"});
                this.ws.send(msg);
            };
            ...
        })(window);
    });
};
page.onCallback = function(data){
    console.log(JSON.stringify(data, undefined, 4));
};
Run Code Online (Sandbox Code Playgroud)

1我的测试实际上表明websocket echo页面适用于v1.9.6及更高版本,但不适用于v1.9.0.