Intereting Posts
Можно ли перенаправить HTML в функцию javascript? Почему динамическое добавление .onclick к элементу img, когда в цикле требуется функция return ()? Java: У меня есть большая строка html и вам нужно извлечь текст href = “…” изменить метатег viewport с jquery Могу ли я динамически установить tabindex в JavaScript? Обновить состояние родства на основе другого щелкнутого брата ReactJS Центрирование с помощью CSS Transform или Flexbox, которое лучше поддерживать? Как показать два столбца DropDown? Поле поиска по нескольким индексам в таблице html с использованием java-script CSS3 не работает с Bootstrap Может ли элемент html иметь несколько идентификаторов? Сделайте треугольник CSS с прозрачным фоном на div с белым изображением bg? Строковый построитель в формате таблицы html Как заставить HTML-страницы печатать с постоянным размером от Chrome? Можете ли вы иметь несколько областей отсечения в HTML-canvasе?

HtmlUnit не создает объект HtmlPage

Я очень новичок в HtmlUnit, и я пытаюсь очистить веб-сайт, который использует Javascript для редактирования кода. Я слышал, что HtmlUnit – лучший способ, так как он возвращает окончательный код с помощью браузера без браузера.

Однако, как вы увидите, я даже не могу получить представление об объекте HtmlPage, не получая огромное и невозможное понять исключение (по крайней мере, учитывая мой практически нулевой опыт работы с HtmlUnit).

Вот мой код:

import com.gargoylesoftware.htmlunit.*; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Main { public static void main(String[] args) { Main scraper = new Main(); scraper.testingGargoyle(); } private void testingGargoyle() { String myUrl = "https://www.wearvr.com/#game_id=game_4"; WebClient webClient = new WebClient(); try { HtmlPage myPage = ((HtmlPage) webClient.getPage(myUrl)); } catch (FailingHttpStatusCodeException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

И это исключение, которое бросает:

 Apr 30, 2015 5:43:50 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify WARNING: Obsolete content type encountered: 'application/x-javascript'. Apr 30, 2015 5:43:50 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError SEVERE: runtimeError: message=[The data necessary to complete this operation is not yet available.] sourceName=[https://load.sumome.com/] line=[1] lineSource=[null] lineOffset=[0] Exception in thread "main" ======= EXCEPTION START ======== EcmaError: lineNumber=[19] column=[0] lineSource=[] name=[TypeError] sourceName=[https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js] message=[TypeError: Cannot find function bind in object function (e, n, r) {...}. (https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js#19)] com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot find function bind in object function (e, n, r) {...}. (https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js#19) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:847) at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620) at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:733) at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1096) at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:395) at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:270) at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:290) at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:793) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:751) at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170) at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072) at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206) at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330) at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3126) at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2093) at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920) at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499) at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:1017) at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:248) at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:194) at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268) at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156) at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:471) at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:345) at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:410) at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:395) at Main.testingGargoyle(Main.java:19) at Main.main(Main.java:10) Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot find function bind in object function (e, n, r) {...}. (https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js#19) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3629) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3613) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3634) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3650) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.notFunctionError(ScriptRuntime.java:3714) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2233) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2215) at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1333) at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798) at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105) at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:411) at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3057) at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:724) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:832) ... 31 more Enclosed exception: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot find function bind in object function (e, n, r) {...}. (https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js#19) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3629) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3613) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3634) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3650) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.notFunctionError(ScriptRuntime.java:3714) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2233) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2215) at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1333) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:19) at script.r(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:16) at script.r(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:384) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:16) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:16) at script.t(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:16) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:16) at script.t(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:7) at script.t(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:463) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:463) at script.t(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at script.t(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at script(https://www.wearvr.com/assets/scripts/bundle.b4038a088bb1abfcf55c.js:1) at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798) at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105) at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:411) at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309) at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3057) at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:724) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:832) at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620) at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:733) at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1096) at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:395) at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:270) at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:290) at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:793) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:751) at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170) at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072) at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206) at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330) at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3126) at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2093) at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920) at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499) at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:1017) at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:248) at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:194) at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268) at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156) at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:471) at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:345) at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:410) at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:395) at Main.testingGargoyle(Main.java:19) at Main.main(Main.java:10) ======= EXCEPTION END ======== 

Я же сказал, что он огромен. Как я могу обойти это и получить окончательный источник этой страницы, чтобы получить выскабливание?

Заранее спасибо!

Исключения вызывают по нескольким причинам: неправильный html, ошибки на странице скрипта, ресурсы не найдены такие css, файлы сценариев или файлы изображений (например < - https://stackoverflow.com/questions/29973664/htmlunit-not-creating-htmlpage-object/bla.gif not found HTML404)

Таким образом, мы используем эти опции, чтобы поддерживать html navegating, не останавливаясь на первой ошибке / проблеме, которую мы используем:

 webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); 

Вы также можете реализовать пустые classы, чтобы остановить htmlUnity на verbose на консоли о ошибках css / javaScript, используя:

 webClient.setCssErrorHandler(new SilentCssErrorHandler()); webClient.setJavaScriptErrorListener(new JavaScriptErrorListener(){}); 

Небольшой пример теста:

 @Test public void TestCall() throws FailingHttpStatusCodeException, MalformedURLException, IOException { WebClient webClient = new WebClient(BrowserVersion.CHROME); webClient.getOptions().setUseInsecureSSL(true); //ignore ssl certificate webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); String url = "https://www.wearvr.com/#game_id=game_4"; HtmlPage myPage = webClient.getPage(url); webClient.waitForBackgroundJavaScriptStartingBefore(200); webClient.waitForBackgroundJavaScript(20000); //do stuff on page ex: myPage.getElementById("main") //myPage.asXml() < - tags and elements System.out.println(myPage.asText()); } 

Попробуйте использовать другой браузер, например:

 String myUrl = "https://www.wearvr.com/#game_id=game_4"; try (WebClient webClient = new WebClient(BrowserVersion.CHROME)) { HtmlPage myPage = ((HtmlPage) webClient.getPage(myUrl)); System.out.println(myPage.asXml()); } catch (FailingHttpStatusCodeException | IOException e) { e.printStackTrace(); } 

Однако это также может быть ошибкой в ​​моделировании IE8