9

是否可以使用 chromedriver 导出 HAR,类似于我在 Firefox 中使用 netexpert+firebug 可以做的事情?

4

3 回答 3

5

是的,使用BrowsermobProxy ,您可以使用 chromedriver 生成 HAR 文件。

这是使用 Selenium、BrowserMob 代理和 chromedriver 以编程方式生成 HAR 文件的 python 脚本。运行此脚本需要用于 selenium 和 browsermob-proxy 的 Python 包。

from browsermobproxy import Server
from selenium import webdriver
import os
import json
import urlparse

server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

chromedriver = "path/to/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
url = urlparse.urlparse (proxy.proxy).path
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(url))
driver = webdriver.Chrome(chromedriver,chrome_options =chrome_options)
proxy.new_har("http://stackoverflow.com", options={'captureHeaders': True})
driver.get("http://stackoverflow.com")    
result = json.dumps(proxy.har, ensure_ascii=False)
print result
proxy.stop()    
driver.quit()
于 2015-08-05T17:24:31.167 回答
2

您可以通过 chromedriver 启用性能日志并分析网络流量以自行构建 HAR。

于 2017-08-30T09:03:08.627 回答
1

请检查代码

https://gist.github.com/Ankit3794/01b63199bd7ed4f2539a088463e54615#gistcomment-3126071

脚步:

通过启用 Logging Preference 启动 ChromeDriver 实例

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("ignore-certificate-errors");
chromeOptions.addArguments("disable-infobars");
chromeOptions.addArguments("start-maximized");

// More Performance Traces like devtools.timeline, enableNetwork and enablePage
Map<String, Object> perfLogPrefs = new HashMap<>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools");
perfLogPrefs.put("enableNetwork", true);
perfLogPrefs.put("enablePage", true);
chromeOptions.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);

// For Enabling performance Logs for WebPageTest
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
capabilities.setCapability("goog:loggingPrefs", logPrefs);
capabilities.merge(chromeOptions);

从性能日志中获取“消息”JSONObject

private static JSONArray getPerfEntryLogs(WebDriver driver) {
    LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE);
    JSONArray perfJsonArray = new JSONArray();
    logEntries.forEach(entry -> {
        JSONObject messageJSON = new JSONObject(entry.getMessage()).getJSONObject("message");
        perfJsonArray.put(messageJSON);
    });
    return perfJsonArray;
}

通过 PerfLogs 获取 HAR

public static void getHAR(WebDriver driver, String fileName) throws IOException {
    String destinationFile = "/HARs/" + fileName + ".har";
    ((JavascriptExecutor) driver).executeScript(
            "!function(e,o){e.src=\"https://cdn.jsdelivr.net/gh/Ankit3794/chrome_har_js@master/chromePerfLogsHAR.js\",e.onload=function(){jQuery.noConflict(),console.log(\"jQuery injected\")},document.head.appendChild(e)}(document.createElement(\"script\"));");
    File file = new File(destinationFile);
    file.getParentFile().mkdirs();
    FileWriter harFile = new FileWriter(file);
    harFile.write((String) ((JavascriptExecutor) driver).executeScript(
            "return module.getHarFromMessages(arguments[0])", getPerfEntryLogs(driver).toString()));
    harFile.close();
}
于 2020-01-03T04:21:34.667 回答