Генерируйте файл Har-File, используя Прокси Browsermob без Selenium в Java - PullRequest
0 голосов
/ 10 ноября 2018

Мне нужно захватить все хосты, с которых веб-страница запрашивает ресурсы во время процесса загрузки. В настоящее время я достигаю этого, используя Selenium с PhantomJSDriver и Browsermob Proxy для создания файла har. После генерации файла я могу проанализировать все HTTP-запросы, которые страница выполняла в процессе загрузки, из хар-логов:

    public static void main(String[] args) throws IOException {

    // BrowserMobProxy
    BrowserMobProxy server = new BrowserMobProxyServer();
    server.start(0);
    server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
    server.enableHarCaptureTypes(CaptureType.RESPONSE_COOKIES, CaptureType.REQUEST_COOKIES,
            CaptureType.REQUEST_HEADERS, CaptureType.RESPONSE_HEADERS, CaptureType.REQUEST_CONTENT,
            CaptureType.RESPONSE_CONTENT);

    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(server);

    // PHANTOMJS_CLI_ARGS
    ArrayList<String> cliArgsCap = new ArrayList<>();
    cliArgsCap.add("--proxy=localhost:" + server.getPort());
    cliArgsCap.add("--ignore-ssl-errors=yes");

    // DesiredCapabilities
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
            "...");

    //connect to website using webdriver
    Set<String> hosts = new HashSet<>();
    WebDriver driver = new PhantomJSDriver(capabilities);

    //generate har-file
    server.newHar();
    String site = "...";
    driver.get(site);

    //parse information from har-file
    Har har = server.getHar();
    for (HarEntry entry : har.getLog().getEntries()) {
        if (!entry.getRequest().getUrl().contains(new URL(site).getHost())) {
            for (HarNameValuePair h : entry.getRequest().getHeaders()) {
                if(h.getName().equals("Host"))
                {
                    if(!hosts.contains(h.getValue()))
                    {
                        hosts.add(h.getValue());
                    }
                }
            }

        }

    }
    server.stop();
    driver.close();

Меня беспокоит, что использование селенового веб-драйвера очень медленное и интенсивное использование памяти. К сожалению, я не очень опытен с Selenium и BMP (или веб-разработкой в ​​целом). Есть ли способ создать har-файл с BMP без использования Selenium? Или, может быть, лучше подходить к получению необходимой мне информации? Заранее спасибо.

...