Tôi cần phải phân tích trang, mọi thứ đều ổn, ngoại trừ một số yếu tố trên trang được tải động. Tôi đã sử dụng jsoup cho các yếu tố tĩnh, sau đó khi tôi nhận ra rằng tôi thực sự cần các yếu tố động, tôi đã thử javafx. Tôi đọc rất nhiều câu trả lời trên stackoverflow và có rất nhiều khuyến nghị để sử dụng javafx WebEngine. Vì vậy, tôi đã kết thúc với mã này.Làm cách nào để tải html của trang được tải đầy đủ (bằng javascript) làm đầu vào trong 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();
}
Tôi tạo chuỗi từ org.w3c.dom.Document và in nó. Nhưng nó cũng vô ích. primaryStage.show() cho tôi xem trang được tải đầy đủ (với phần tử tôi cần được hiển thị trên trang), nhưng không có phần tử nào tôi cần trong mã html (ở đầu ra).
Đây là ngày thứ ba tôi làm việc về vấn đề đó, tất nhiên là thiếu kinh nghiệm là vấn đề chính của tôi, tuy nhiên tôi phải nói: Tôi bị kẹt. Đây là dự án java đầu tiên của tôi sau khi đọc tài liệu tham khảo đầy đủ java. Tôi làm cho nó để có được một số kinh nghiệm thực tế (và cho vui). Tôi muốn làm phân tích cú pháp "ebay" của Trung Quốc.
Dưới đây là vấn đề và các trường hợp thử nghiệm của tôi:
http://detail.tmall.com/item.htm?spm=a220o.1000855.0.0.PZSbaQ&id=19378327658 nhu cầu để có được tự động nạp giảm giá "129.00"
http://item.taobao.com/item.htm?spm=a230r.1.14.67.MNq30d&id=22794120348 cần "15.20"
Như bạn có thể thấy, nếu bạn xem các trang này với trình duyệt lúc đầu bạn thấy giá gốc và sau một lần giảm giá thứ hai hoặc lâu hơn.
Thậm chí có thể nhận được mức chiết khấu động này từ trang html không? Các yếu tố khác tôi cần phân tích là tĩnh. Điều gì để thử tiếp theo: một thư viện để render html với javascript hoặc có thể smth khác? Tôi thực sự cần một số lời khuyên, không muốn từ bỏ.
Cảm ơn! Tôi đang đọc tài liệu selenium, hy vọng điều này sẽ giúp ích cho bạn. Ngoài ra tôi không thực sự cần phải render trang, tôi chỉ cần xử lý html như là một đầu vào để phân tích thêm. – rivf