https://developers.google.com/webmasters/ajax-crawling/docs/html-snapshotによると、HtmlUnit(2.13)を使用して、AngularJS(1.2.1)を使用してWebページのスナップショットを作成しようとしています。私はhttp://htmlunit.10904.n7.nabble.com/htmlunit-to-scrape-angularjs-td29931.html#a30075を認識していwebClient.getPage(...)
は、任意の例外をスローしませんが結果の文字列は、まだそのようHTMLUnitがAngularJSで動作しない
<div>
{{name}}
</div>
として「未評価の角度の表現」が含まれてい
WebClient webClient = new WebClient();
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.setCssErrorHandler(new SilentCssErrorHandler());
webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setRedirectEnabled(false);
webClient.getOptions().setAppletEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setPopupBlockerEnabled(true);
webClient.getOptions().setTimeout(10000);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(true);
webClient.getOptions().setThrowExceptionOnScriptError(true);
webClient.getOptions().setPrintContentOnFailingStatusCode(true);
HtmlPage page = webClient.getPage(new WebRequest(new URL("..."), HttpMethod.GET));
webClient.waitForBackgroundJavaScript(5000);
String result = page.asXml();
しかしrecomendation:
私のJavaコードがあります与えられてもどちらもうまくいきません。
もちろん、同じGETリクエストは、現在のすべてのブラウザで例外なく動作します。
AngularJSでHtmlUnitを使用するにあたってどのようなアイデアや経験がありますか?
更新:
私はHTMLUnit bug reportを作成しました。
現時点では、実装をPhantomJSに切り替えました。たぶん、このコードスニペットは、同様の問題で他の人を支援します。
System.setProperty("phantomjs.binary.path", "phantomjs.exe");
DesiredCapabilities caps = new DesiredCapabilities();
caps.setJavascriptEnabled(true);
caps.setCapability("takesScreenshot", false);
PhantomJSDriver driver = new PhantomJSDriver(caps);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(new URL("..."));
String result = driver.getPageSource();
アップデート2: 私は、Googleのクローラが今
これは、HTMLUnitが角度指示を解決していないという問題を解決したため、これが受け入れられる回答になるはずです。ありがとう! – chaitanya
これは、HtmlUnitのAngularJSに対する貧弱なサポートのために役立つようですが、すべての問題を解決するわけではありません。うまくいけば、2.15はより良いでしょう... – Splaktar