Potrzebuję parsować stronę, wszystko jest w porządku, z wyjątkiem niektórych elementów na stronie ładowanych dynamicznie. Użyłem jsoup dla elementów statycznych, a kiedy zdałem sobie sprawę, że naprawdę potrzebuję elementów dynamicznych, wypróbowałem javafx. Czytałem wiele answeres na stackoverflow i było wiele zaleceń do używania javafx WebEngine. Więc skończyłem z tym kodem.Jak pobrać html z w pełni załadowanej strony (z javascript) jako dane wejściowe w java?
@Override
public void start(Stage primaryStage) {
WebView webview = new WebView();
final WebEngine webengine = webview.getEngine();
webengine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
public void changed(ObservableValue ov, State oldState, State newState) {
if (newState == Worker.State.SUCCEEDED) {
Document doc = webengine.getDocument();
//Serialize DOM
OutputFormat format = new OutputFormat (doc);
// as a String
StringWriter stringOut = new StringWriter();
XMLSerializer serial = new XMLSerializer (stringOut, format);
try {
serial.serialize(doc);
} catch (IOException e) {
e.printStackTrace();
}
// Display the XML
System.out.println(stringOut.toString());
}
}
});
webengine.load("http://detail.tmall.com/item.htm?spm=a220o.1000855.0.0.PZSbaQ&id=19378327658");
primaryStage.setScene(new Scene(webview, 800, 800));
primaryStage.show();
}
Zrobiłem napis z org.w3c.dom.Document i wydrukowałem go. Ale to też było bezużyteczne. primaryStage.show() pokazał mi w pełni załadowaną stronę (z elementem, który muszę wyrenderować na stronie), ale nie było elementu, którego potrzebuję w kodzie HTML (na wyjściu).
To już trzeci dzień, nad którym pracuję, oczywiście brak doświadczenia jest moim głównym problemem, niemniej muszę powiedzieć: utknąłem. To jest mój pierwszy projekt java po przeczytaniu kompletnego odwołania java. Robię to, aby uzyskać pewne doświadczenie w świecie rzeczywistym (i dla zabawy). Chcę stworzyć parser chińskiego "ebay".
Tutaj jest problem i moje przypadki testowe:
http://detail.tmall.com/item.htm?spm=a220o.1000855.0.0.PZSbaQ&id=19378327658 potrzeba, aby załadowane dynamicznie zniżkę "129.00"
http://item.taobao.com/item.htm?spm=a230r.1.14.67.MNq30d&id=22794120348 potrzebę "15.20"
Jak widać, jeśli zobaczyć te strony z przeglądarką na początku widzisz oryginalną cenę i po mniej więcej sekundzie - zniżka.
Czy jest możliwe uzyskanie dynamicznych rabatów ze strony html? Inne elementy, które muszę przeanalizować, są statyczne. Co dalej wypróbować: inna biblioteka do renderowania html z javascript lub może coś jeszcze? Naprawdę potrzebuję porady, nie chcę się poddawać.
Dzięki! Czytam teraz dokumentację selenu, mam nadzieję, że to pomaga. Tak naprawdę nie muszę renderować strony, potrzebuję tylko przetworzonego html jako danych wejściowych do dalszego analizowania. – rivf