ページを解析する必要があります。ページ上の一部の要素が動的に読み込まれることを除いて、すべて問題ありません。静的要素にはjsoupを使用しましたが、動的要素が本当に必要であることに気付いたとき、javafxを試しました。私はstackoverflowに関する多くの回答を読み、javafx WebEngineを使用するための多くの推奨事項がありました. だから私はこのコードで終わりました。
@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 動的に読み込まれる割引「129.00」を取得する必要があります
http://item.taobao.com/item.htm?spm=a230r.1.14.67.MNq30d&id=22794120348 「15.20」が必要
ご覧のとおり、このページをブラウザで最初に表示すると、元の価格が表示され、数秒後に割引が表示されます。
HTMLページからこの動的割引を取得することは可能ですか? 解析する必要があるその他の要素は静的です。次に何を試すか: javascript を使用して html をレンダリングする別のライブラリか、それ以外の機能を使用しますか? 諦めたくないのでアドバイスお願いします。