Ho bisogno di analizzare la pagina, tutto è ok tranne alcuni elementi nella pagina caricati dinamicamente. Ho usato jsoup per elementi statici, poi quando ho capito che avevo davvero bisogno di elementi dinamici, ho provato javafx. Ho letto molte risposte su StackOverflow e c'erano molti consigli per utilizzare javafx WebEngine. Così ho finito con questo codice.Come ottenere html della pagina completamente caricata (con javascript) come input in 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();
}
Ho creato una stringa da org.w3c.dom.Document e l'ho stampata. Ma era anche inutile. primaryStage.show() mi ha mostrato la pagina completamente caricata (con l'elemento che ho bisogno di render sulla pagina), ma non c'era alcun elemento che mi servisse nel codice html (in output).
Questo è il terzo giorno in cui sto lavorando a questo problema, ovviamente la mancanza di esperienza è il mio problema principale, tuttavia devo dire: sono bloccato. Questo è il mio primo progetto java dopo aver letto il riferimento completo di java. Lo faccio per avere qualche esperienza del mondo reale (e per divertimento). Voglio fare il parser del cinese "ebay".
qui è il problema ed i miei casi di test:
http://detail.tmall.com/item.htm?spm=a220o.1000855.0.0.PZSbaQ&id=19378327658 necessario per ottenere dinamicamente caricati sconto "129.00"
http://item.taobao.com/item.htm?spm=a230r.1.14.67.MNq30d&id=22794120348 necessità "15.20"
Come si può vedere, se si visualizza queste pagine con il browser in un primo momento vedete il prezzo originale e dopo circa un secondo - sconto.
È persino possibile ottenere questi sconti dinamici dalla pagina html? Altri elementi che devo analizzare sono statici. Cosa provare dopo: un'altra libreria per il rendering di html con javascript o forse con altro ancora? Ho davvero bisogno di un consiglio, non voglio arrendermi.
Grazie! Sto leggendo la documentazione sul selenio ora, spero che questo aiuti. Inoltre non ho davvero bisogno di renderizzare la pagina, ho bisogno solo di html elaborato come input per un'ulteriore analisi. – rivf