Как использовать htmlunit + jsoup для очистки сайтов, использующих javascript для динамической загрузки контента - PullRequest
1 голос
/ 10 февраля 2020

https://www.reddit.com/r/buildapcsales/top/ занимает около 3 секунд, чтобы загрузить весь контент. В настоящее время с помощью jsoup я могу очистить только первые 7 потоков, так как другие потоки загружаются через несколько секунд. Я пытаюсь заставить htmlunit загрузить всю страницу, а затем использовать jsoup, чтобы очистить заголовки всех веток.

        WebClient webClient = new WebClient(BrowserVersion.CHROME);
        webClient.getOptions().setJavaScriptEnabled(true);
        Page page = webClient.getPage(url.toString());
        WebResponse response = page.getWebResponse();
        String content = response.getContentAsString();



      //  webClient.getOptions().setJavaScriptEnabled(true);
      //  webClient.getOptions().setThrowExceptionOnScriptError(true);
       // webClient.waitForBackgroundJavaScript(50000);
       // webClient.wait(5000);
       // HtmlPage page = webClient.getPage(url.toString());

Я получаю миллион ошибок всякий раз, когда я устанавливаю значение JavascriptEnabled в true, но если я включаю его в false. Это не ошибка, однако я все еще получаю 7 потоков с jsoup.

ПРЕДУПРЕЖДЕНИЕ: Скрипт не JavaScript (тип: 'application / json', language: ''). Пропуск исполнения. 09 февраля 2020 16:54:36 com.gargoylesoftware.htmlunit. javascript .DefaultJavaScriptErrorListener scriptException SEVERE: Ошибка во время выполнения JavaScript ======= ИСКЛЮЧЕНИЕ START ======== Класс исключения = [net .sourceforge.htmlunit.core js. javascript .EvaluatorException] com.gargoylesoftware.htmlunit.ScriptException: синтаксическая ошибка (https://www.redditstatic.com/desktop2x/vendors~Governance~Reddit.791bf381e13bfdc452ab.js#1) в com.gargoylesoftware.htmlunit. javascript .JavaScriptEngine $ HtmlUnitContextAction.run (JavaScriptEngine. java: 882) в net .sourceforge.htmlunit.core js. javascript .Context.call (Context. java: 624) в net. sourceforge.htmlunit.core js. javascript .ContextFactory.call (ContextFactory. java: 537) по адресу com.gargoylesoftware.htmlunit. javascript .HtmlUnitContextFactory.callSecured (HtmlUnitContext3) atactF: 3333: 10333 .gargoylesoftware.htmlunit. javascript .JavaScriptEngine.compile (JavaScriptEngine. java: 713) на com.gargoylesoftware.htmlunit. javascript .JavaScriptEngine.compile (JavaScriptEngine. java: 679) на com.gargoylesunware.h . javascript .JavaScriptEngine.compile (Javas criptEngine. java: 103) в com.gargoylesoftware.htmlunit. html .HtmlPage.loadJavaScriptFromUrl (HtmlPage. java: 1104) в com.gargoylesoftware.htmlunit. html .HtmlPage.loadExternalJavaScript *: 984) в com.gargoylesoftware.htmlunit. html .HtmlScript.executeScriptIfNeeded (HtmlScript. java: 361) в com.gargoylesoftware.htmlunit. html .HtmlScript $ 2.execute (HtmlScript. java 234: ) в com.gargoylesoftware.htmlunit. html .HtmlPage.initialize (HtmlPage. java: 301) в com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto (WebClient. java: 560t) в comgar. WebClient.getPage (WebClient. java: 419) на com.gargoylesoftware.htmlunit.WebClient.getPage (WebClient. java: 336) на com.gargoylesoftware.htmlunit.WebClient.getPage (WebClient. * 1053): в com.gargoylesoftware.htmlunit.WebClient.getPage (WebClient. java: 469) в RedditScraper.main (RedditScraper. java: 40)

Это некоторые из первых нескольких ошибок

1 Ответ

0 голосов
/ 20 февраля 2020

Мне было нелегко пытаться запустить javascript внутри HtmlUnit. Затем я попробовал Селен , и это сработало как шарм.

...