私はページを解析する必要がありますが、ページ上のいくつかの要素が動的に読み込まれる点を除いて、すべては問題ありません。静的要素にjsoupを使用したところ、動的要素が本当に必要であることがわかったとき、私はjavafxを試みました。私はstackoverflowに関する多くの回答を読んで、javafx WebEngineを使用するための多くの推奨事項がありました。だから私はこのコードで終わった。Javaの入力として完全に読み込まれたページのHTMLを取得するにはどうすればよいですか?
@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();
}
文字列をorg.w3c.dom.Documentから作成して印刷しました。しかしそれは役に立たなかった。 primaryStage.show()は完全にロードされたページを表示しましたが(要素をページにレンダリングする必要があります)、HTMLコードに必要な要素はありませんでした(出力時)。
私はこの問題に取り組んでいる3日目ですが、もちろん経験の欠如が私の主な問題ですが、それでも私は固執しています。これは、Javaの完全なリファレンスを読んだ後、私の最初のJavaプロジェクトです。私は実世界の経験を(そして楽しみながら)得るためにそれを作ります。私は中国の "eBay"のパーサを作りたいと思う。ここで
は問題と私のテストケースがある:あなたが見ることができるようにあなたが表示する場合
http://detail.tmall.com/item.htm?spm=a220o.1000855.0.0.PZSbaQ&id=19378327658 は、必要性 "15.20"
動的にロードされた割引を受けるために、 "129.00"
http://item.taobao.com/item.htm?spm=a230r.1.14.67.MNq30d&id=22794120348 が必要最初のブラウザでは、このページは、元の価格を参照してください秒後またはそれを割引。
この動的割引をHTMLページから取得することも可能ですか?私が解析する必要がある他の要素は静的です。次に試すもの:javascriptでhtmlをレンダリングする別のライブラリか、それとも別のライブラリですか?私は本当にいくつかのアドバイスが必要です、あきらめたくありません。
ありがとうございます!私は今セレンの文書を読んでいます、これが助けてくれることを願っています。また、私は実際にページをレンダリングする必要はありません、私はさらに解析するための入力として処理されたhtmlだけが必要です。 – rivf