2016-03-25 5 views
0

Я запускаю простой скрипт node, который начинается с chromedriver, указанный на моем веб-сайте, прокручивается в нижней части страницы и записывает трассировку в trace.json.Как использовать trace.json, написанный ChromeDriver

Этот файл составляет около 30 МБ.

Я не могу загрузить этот файл в chrome://tracing/, и это то, что я предполагаю сделать для просмотра данных профиля.

Каковы мои возможности для определения смысла моего файла trace.json?

Вот мой node сценарий, в том случае, помогает прояснить, что я до:

'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

является файлом правильно сгенерированным? вы можете загрузить его вручную? –

+0

Загрузите его вручную как? Сам файл огромен, поэтому трудно сказать, правильно ли он создан, но он «выглядит» ОК. Правильный JSON и т. Д. – jerome

+0

Чтобы загрузить его вручную: запустите Chrome, перейдите в chrome: // tracing/и нажмите Load. –

ответ

3

Ваш скрипт не сгенерирует правильный формат. Необходимые данные для каждой записи находятся в message.message.params.

Чтобы создать след, который может быть загружен в хроме: // трассировка:

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(); 

Того же сценарий с 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() 

 Смежные вопросы

  • Нет связанных вопросов^_^