Как получить доступ к панели "Сеть" в инструментах разработчика Google Chrome с помощью селена?

Я хочу получить вывод, отображаемый на сетевой панели инструментов разработчика.

[Панель сети → Имя, Метод, Статус, Тип, Инициатор, Размер, Время, Временная шкала]

Мне нужна эта информация.

Ответ 1

Это возможно через Selenium WebDriver. Для этого вы должны сделать следующее:

  1. Загрузите клиентские драйверы, ориентированные на язык selenium, с - http://docs.seleniumhq.org/download/ и добавьте подходящие файлы jar в ваш путь построения проекта.

  2. Для запуска теста с Chrome/Chromium вам также понадобится двоичный диск с хроматированием, который можно загрузить с сайта: http://chromedriver.storage.googleapis.com/index.html.

  3. Создайте тестовый пример:

    // specify the path of the chromdriver binary that you have downloaded (see point 2)
    System.setProperty("webdriver.chrome.driver", "/root/Downloads/chromedriver");
    ChromeOptions options = new ChromeOptions();
    // if you like to specify another profile
    options.addArguments("user-data-dir=/root/Downloads/aaa"); 
    options.addArguments("start-maximized");
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    WebDriver driver = new ChromeDriver(capabilities);
    driver.get("http://www.google.com");
    String scriptToExecute = "var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {}; var network = performance.getEntries() || {}; return network;";
    String netData = ((JavascriptExecutor)driver).executeScript(scriptToExecute).toString();

Выполнение javascript в Chrome/Chromium поможет вам получить информацию о сети (а не только). Полученная строка "netData" будет содержать требуемые данные в формате JSONArray.

Надеюсь, это поможет.

Ответ 2

Из этого ответа.

Вы можете использовать LoggingPreferences для получения журналов производительности. Он возвращает данные в формате json. Вот пример Java-кода. Протестировали это с помощью селена 2.53, хромографа 2.20, Chrome 50 на Ubuntu 14.04. Это также должно работать и на окнах.

    DesiredCapabilities d = DesiredCapabilities.chrome();
    LoggingPreferences logPrefs = new LoggingPreferences();
    logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
    d.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
    WebDriver driver = new ChromeDriver(d);
    driver.get("http://www.google.com");
    LogEntries les = driver.manage().logs().get(LogType.PERFORMANCE);
    for (LogEntry le : les) {
        System.out.println(le.getMessage());
    }

Вот пример вывода. Он отформатирован вручную. Фактический вывод находится в одной строке.

{
    "message": {
        "method": "Network.requestWillBeSent",
        "params": {
            "documentURL": "https://www.google.co.in/?gfe_rd=cr&ei=gpwxV4OSKMmR2ASEg6-YCg&gws_rd=ssl",
            "frameId": "31172.2",
            "initiator": {
                "stack": {
                    "callFrames": [
                        {
                            "columnNumber": 11511,
                            "functionName": "",
                            "lineNumber": 55,
                            "scriptId": "50",
                            "url": "https://www.google.co.in/?gfe_rd=cr&ei=gpwxV4OSKMmR2ASEg6-YCg&gws_rd=ssl"
                        }
                    ]
                },
                "type": "script"
            },
            "loaderId": "31172.3",
            "request": {
                "headers": {
                    "Accept": "*/*",
                    "Referer": "https://www.google.co.in/",
                    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36"
                },
                "initialPriority": "Low",
                "method": "GET",
                "mixedContentType": "none",
                "url": "https://www.google.co.in/xjs/_/js/k=xjs.s.en.VTDhrkH4c9U.O/m=sx,c,sb,cdos,cr,elog,jsa,r,hsm,qsm,j,p,d,csi/am=AJQ0CwoS8fchIGwhrCA1YGBR/rt=j/d=1/t=zcms/rs=ACT90oGi2YIjVL5cBzOc1-MD37a1NqZ1jA"
            },
            "requestId": "31172.3",
            "timestamp": 251208.074288,
            "type": "Other",
            "wallTime": 1462869123.92204
        }
    },
    "webview": "8AF4A466-8027-4340-B9E9-CFEBDA769C50"
}

Ответ 3

Скажем, вы хотите загрузить страницу (например, google.com) и извлечь массив объектов синхронизации ресурсов (например, window.performance.getEntries()):

import time
from selenium import webdriver
driver = webdriver.Chrome('/path/to/chromedriver)
driver.get('https://www.google.com');
time.sleep(5)
timings = driver.execute_script("return window.performance.getEntries();")
print timings

Ответ 4

Как отмечено в других ответах, вам необходимо использовать методы window.performance.

getEntries()
getEntriesByType()
getEntriesByName()
" Типы входа

Например, я использовал следующий фрагмент в тесте nodejs Selenium-WebDriver: Chromedriver для сбора сетевых вызовов google analytics:

driver
  .executeScript( "return window.performance.getEntriesByType('resource');" )
  .then( (perfEntries)=> {
    let gaCalls = perfEntries.filter(function(entry){
      return /collect\?/i.test(entry.name);
    });
    console.log(gaCalls);
});

Если бы вы использовали getEntries() вместо getEntriesByType('resource'), он вернул бы... все записи.