Nach https://developers.google.com/webmasters/ajax-crawling/docs/html-snapshot, mit HtmlUnit (2.13) Ich versuche, einen Snapshot für eine Webseite mit AngularJS (1.2.1) zu erstellen.HTMLUnit funktioniert nicht mit AngularJS
Mein Java-Code ist:
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();
Obwohl webClient.getPage(...)
keine Ausnahme macht wirft das Ergebnis Zeichenfolge enthält noch „unbewertet Winkel Ausdrücke“ wie
<div>
{{name}}
</div>
Ich bin mir bewusst, http://htmlunit.10904.n7.nabble.com/htmlunit-to-scrape-angularjs-td29931.html#a30075 aber die recomendation da gegeben funktioniert auch nicht.
Natürlich funktioniert die gleiche GET-Anfrage ohne Ausnahmen in allen aktuellen Browsern.
Irgendwelche Ideen/Erfahrungen wie HtmlUnit mit AngularJS arbeiten?
Update:
habe ich eine Htmlunit bug report.
Im Moment habe ich meine Implementierung auf PhantomJS umgestellt. Vielleicht andere dieser Code-Schnipsel hilft mit einem ähnlichen Problem:
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();
Update2: ich manuell als Google-Crawler meiner Seiten-Rendering stoped macht Angular Websites selbst jetzt
Dies sollte die akzeptierte Antwort sein, da es das Problem gelöst hat, wo HTMLUnit die Winkelanweisungen nicht auflöst. Vielen Dank! – chaitanya
Dies scheint zu helfen, aufgrund der schlechten Unterstützung von HtmlUnit für AngularJS, aber es löst nicht alle Probleme. Hoffentlich wird 2.15 besser sein ... – Splaktar