используя предоставленные ссылки на страницы через Java-клиент - PullRequest
0 голосов
/ 26 марта 2019

Мне дали URL, мне нужно получить этот URL HTML и оттуда получить ссылки на этот сайт. Я думал об использовании безголовых браузеров. Я использую Java, поэтому я хотел бы подвести итог, используя процесс Java.
примером может быть cnn site ... До сих пор я пытался использовать:

testCompile 'net.sourceforge.htmlunit: htmlunit: 2.32'

   @Test
     public void htmlUnitTest() throws Exception {

      try (final WebClient webClient = new WebClient(BrowserVersion.CHROME)) {

        webClient.waitForBackgroundJavaScriptStartingBefore(20000);
        webClient.getOptions().setThrowExceptionOnScriptError(false);

        final HtmlPage page = webClient.getPage(URL);
        WebResponse response = page.getWebResponse();
        String content = response.getContentAsString();

        List<HtmlAnchor> anchors = page.getAnchors();

        System.out.println("anchors.size() : " + anchors.size());
        System.out.println("***********");
        System.out.println(content);
        System.out.println("***********");

        try (BufferedWriter writer = new BufferedWriter(new FileWriter("htmlUnit.txt"))) {
            writer.write(content);
        }
    }
}

но в ответ я получаю исходный HTML без рендеринга (java-скрипт не работал и не создал якоря страницы в моем случае)

Может кто-нибудь порекомендовать другую библиотеку или сказать мне, если я скучаю по использованию модуля html и могу предложить рабочее решение, это будет очень полезно.

1 Ответ

0 голосов
/ 27 марта 2019

Методы waitForBackgroundJavaScriptXX не являются опциями;Вы должны называть их ПОСЛЕ getPage (URL) или любого другого взаимодействия, например click ().

Одним из основных отличий между HtmlUnit и Selenium является интеграция всех частей.В HtmlUnit движок javascript является частью или реализацией, это подразумевает, что API способен получать информацию о текущем состоянии.В результате методы waitForBackgroundJavaScriptXX ожидают только при наличии некоторого ожидающего JavaScript.Если их нет, они не являются оперативниками.

...