2015-04-29 1 views
20

Je consigner le trafic Websocket à l'aide de Chrome/Developer Tools. Je n'ai aucun problème à afficher les cadres websocket dans la fenêtre réseau "Frames", mais je ne peux pas enregistrer toutes les images (contenu encapsulé comme JSON) dans un fichier externe (texte). J'ai déjà essayé de sauvegarder en tant que HAR et j'ai simplement utilisé cntl A, C, V (première copie de "page" seulement) mais je n'ai pas encore eu beaucoup de succès.Comment enregistrer les trames Websocket dans Chrome

Je courais Linux Mint 17.

Avez-vous des conseils sur comment cela peut être fait?

Répondre

7

Mise à jour pour Chrome 63, Janvier 2018


je réussi à les exporter en JSON comme ceci:

  1. détachons un inspecteur actif (si nécessaire)
  2. commencer un inspecteur de l'inspecteur avec ctrl-shift-j/cmd-opt-j
  3. collez le code suivant dans cette instance d'inspecteur.

À ce stade, vous pouvez faire ce que vous voulez avec les cadres. J'ai utilisé l'utilitaire console.save de https://bgrins.github.io/devtools-snippets/#console-save pour enregistrer les images en tant que fichier JSON (inclus dans l'extrait ci-dessous).

// https://bgrins.github.io/devtools-snippets/#console-save 
(function(console){ 
    console.save = function(data, filename){ 
    if(!data) { 
     console.error('Console.save: No data') 
     return; 
    } 

    if(!filename) filename = 'console.json' 

    if(typeof data === "object"){ 
     data = JSON.stringify(data, undefined, 4) 
    } 

    var blob = new Blob([data], {type: 'text/json'}), 
    e = document.createEvent('MouseEvents'), 
    a = document.createElement('a') 

    a.download = filename 
    a.href = window.URL.createObjectURL(blob) 
    a.dataset.downloadurl = ['text/json', a.download, a.href].join(':') 
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) 
    a.dispatchEvent(e) 
    } 
})(console) 

// Frame/Socket message counter + filename 
var iter = 0; 

// This replaces the browser's `webSocketFrameReceived` code with the original code 
// and adds two lines, one to save the socket message and one to increment the counter. 
SDK.NetworkDispatcher.prototype.webSocketFrameReceived = function (requestId, time, response) { 
    var networkRequest = this._inflightRequestsById[requestId]; 
    if (!networkRequest) return; 
    console.save(JSON.parse(response.payloadData), iter + ".json") 
    iter++; 
    networkRequest.addFrame(response, time, false); 
    networkRequest.responseReceivedTime = time; 
    this._updateNetworkRequest(networkRequest); 
} 

Ceci enregistre toutes les images de socket entrantes dans votre emplacement de téléchargement par défaut.

+0

Je reçois un SDK non défini lors de l'utilisation de votre code. Des conseils sur la façon de le faire fonctionner? – viksit

+0

Résolu ceci. Pour ceux qui y sont confrontés plus tard - une fois le nouvel inspecteur-inspecteur défini, vous devez taper le code dans la nouvelle fenêtre, mais toutes vos autres activités WS seront sorties/enregistrées dans la fenêtre d'origine de la console/du navigateur. – viksit