2016-03-25 9 views
0

Ich führe ein einfaches node Skript, das chromedriver beginnt auf meiner Website, scrollt an den unteren Rand der Seite, und schreibt die Spur auf trace.json.Wie benutze ich trace.json geschrieben von ChromeDriver

Diese Datei ist ungefähr 30 MB groß.

Ich kann nicht scheinen, diese Datei in chrome://tracing/ zu laden, was ich nehme, würde ich tun, um die Profildaten zu sehen.

Was sind meine Optionen, um meine trace.json Datei sinnvoll zu machen?

Hier ist mein node Skript, falls das hilft zu klären, was ich bin bis zu:

'use strict'; 

var fs = require('fs'); 
var wd = require('wd'); 
var b = wd.promiseRemote('http://localhost:9515'); 

b.init({ 
    browserName: 'chrome', 
    chromeOptions: { 
    perfLoggingPrefs: { 
     'traceCategories': 'toplevel,disabled-by-default-devtools.timeline.frame,blink.console,disabled-by-default-devtools.timeline,benchmark' 
    }, 
    args: ['--enable-gpu-benchmarking', '--enable-thread-composting'] 
    }, 
    loggingPrefs: { 
    performance: 'ALL' 
    } 
}).then(function() { 
    return b.get('http://www.example.com'); 
}).then(function() { 
    // We only want to measure interaction, so getting a log once here 
    // flushes any previous tracing logs we have. 
    return b.log('performance'); 
}).then(function() { 
    // Smooth scroll to bottom. 
    return b.execute(` 
    var height = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight); 
    chrome.gpuBenchmarking.smoothScrollBy(height, function(){}); 
    `); 
}).then(function() { 
    // Wait for the above action to complete. 
    return b.sleep(5000); 
}).then(function() { 
    // Get all the trace logs since last time log('performance') was called. 
    return b.log('performance'); 
}).then(function (data) { 
    // Write the file to disk. 
    return fs.writeFileSync('trace.json', JSON.stringify(data.map(function (s) { 
    return JSON.parse(s.message); // This is needed since Selenium outputs logs as strings. 
    }))); 
}).fin(function() { 
    return b.quit(); 
}).done(); 
+0

Ist die Datei korrekt erzeugt? Können Sie es manuell laden? –

+0

Laden Sie es manuell, wie? Die Datei selbst ist riesig, also schwer zu sagen, wenn sie korrekt erzeugt wird, aber sie sieht "OK" aus. Korrekter JSON usw. – jerome

+0

So laden Sie es manuell: Starten Sie Chrome, gehen Sie zu chrome: // tracing/und klicken Sie auf Laden. –

Antwort

3

Ihr Skript erzeugt nicht das richtige Format. Die erforderlichen Daten für jeden Eintrag befinden sich in message.message.params.

Um eine Spur zu erzeugen, die in Chrom geladen werden kann: // Tracing:

var fs = require('fs'); 
var webdriver = require('selenium-webdriver'); 

var driver = new webdriver.Builder() 
    .withCapabilities({ 
    browserName : 'chrome', 
    loggingPrefs : { performance: 'ALL' }, 
    chromeOptions : { 
     args: ['--enable-gpu-benchmarking', '--enable-thread-composting'], 
     perfLoggingPrefs: { 
     'traceCategories': 'toplevel,disabled-by-default-devtools.timeline.frame,blink.console,disabled-by-default-devtools.timeline,benchmark' 
     } 
    } 
    }).build(); 

driver.get('https://www.google.com/ncr'); 
driver.sleep(1000); 

// generate a trace file loadable in chrome://tracing 
driver.manage().logs().get('performance').then(function (data) { 
    fs.writeFileSync('trace.json', JSON.stringify(data.map(function (d) { 
    return JSON.parse(d['message'])['message']['params']; 
    }))); 
}); 

driver.quit(); 

das gleiche Skript mit Python:

import json, time 
from selenium import webdriver 

driver = webdriver.Chrome(desired_capabilities = { 
    'loggingPrefs': { 'performance': 'ALL' }, 
    'chromeOptions': { 
    "args" : ['--enable-gpu-benchmarking', '--enable-thread-composting'], 
    "perfLoggingPrefs" : { 
     "traceCategories": "toplevel,disabled-by-default-devtools.timeline.frame,blink.console,disabled-by-default-devtools.timeline,benchmark" 
    } 
    } 
}) 

driver.get('https://stackoverflow.com') 
time.sleep(1) 

# generate a trace file loadable in chrome://tracing 
with open(r"trace.json", 'w') as f: 
    f.write(json.dumps([json.loads(d['message'])['message']['params'] for d in driver.get_log('performance')])) 

driver.quit()