Javascript 如何在Phantom.js中监视WebSocket通信?

Javascript 如何在Phantom.js中监视WebSocket通信?,javascript,websocket,phantomjs,Javascript,Websocket,Phantomjs,Phantom.js文档显示了如何监控HTTP通信: 但是,它不适用于WebSocket。如何在Phantom.js中监视WebSocket通信?PhantomJS 1.x不支持WebSocket 1,因此您无法监视它们。如果页面对WebSocket使用了一些回退,则和可用于记录消息的元数据。PhantomJS不公开以任何方式发送的实际数据 WebSocket在PhantomJS2中正常工作。由于不需要后退,因此无法观察这些事件的流量。上面提到的事件处理程序没有显示任何内容。查看消息的唯一方法是

Phantom.js文档显示了如何监控HTTP通信:


但是,它不适用于WebSocket。如何在Phantom.js中监视WebSocket通信?

PhantomJS 1.x不支持WebSocket 1,因此您无法监视它们。如果页面对WebSocket使用了一些回退,则和可用于记录消息的元数据。PhantomJS不公开以任何方式发送的实际数据

WebSocket在PhantomJS2中正常工作。由于不需要后退,因此无法观察这些事件的流量。上面提到的事件处理程序没有显示任何内容。查看消息的唯一方法是尽早代理
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));
};
1我的测试实际上表明,该版本适用于v1.9.6及以上版本,但不适用于v1.9.0

如果页面对WebSocket使用了一些回退,则 page.onResourceRequested和page.onResourceReceived可用于 记录消息的元数据。PhantomJS不会暴露 以任何方式发送的实际数据

更苗条的JS帮助解决了这个问题。 更苗条的JS可以让你捕获响应体。这在phantom JS 1.x中是不可能的,并且此功能已从最新的2.x中删除

使用slimerjs,可以捕获XHR请求的内容,但不能捕获websocket请求的内容。 因此,我们将在网页初始化时显式禁用网页的WebSocket(page.onInitialized),这样网页将使用回退,即XHR,然后您可以捕获内容

page.captureContent = [ /application\/javascript/ ]; 

page.onInitialized = function() {
    page.evaluate(function() {

        (function(w) {
            window.WebSocket = undefined; // we are explicitly disabling websockets for the page. so that the website will be using the fallback

        })(window);
    });
};

page.open(url, function(status) {

})

你能看到我在@user:1816580上的问题吗?你能告诉我发送后如何关闭连接吗?发送方法中没有提供回调?如果我把这个.ws.close()放在send之后,就不能保证send会发送,因为它是异步的,close可能会先发送