使用 Jsoup 提取 JavaScript 資料
在此示例中,我們將嘗試查詢包含 backgroundColor:'#FFF'
的 JavaScript 資料。然後,我們將更改 backgroundColor'#FFF'
⇨'#ddd'
的值。此程式碼使用 getWholeData()
和 setWholeData()
方法來處理 JavaScript 資料。或者,html()
方法可用於獲取 JavaScript 的資料。
// create HTML with JavaScript data
StringBuilder html = new StringBuilder();
html.append("<!DOCTYPE html> <html> <head> <title>Hello Jsoup!</title>");
html.append("<script>");
html.append("StackExchange.docs.comments.init({");
html.append("highlightColor: '#F4A83D',");
html.append("backgroundColor:'#FFF',");
html.append("});");
html.append("</script>");
html.append("<script>");
html.append("document.write(<style type='text/css'>div,iframe { top: 0; position:absolute; }</style>');");
html.append("</script>\n");
html.append("</head><body></body> </html>");
// parse as HTML document
Document doc = Jsoup.parse(html.toString());
String defaultBackground = "backgroundColor:'#FFF'";
// get <script>
for (Element scripts : doc.getElementsByTag("script")) {
// get data from <script>
for (DataNode dataNode : scripts.dataNodes()) {
// find data which contains backgroundColor:'#FFF'
if (dataNode.getWholeData().contains(defaultBackground)) {
// replace '#FFF' -> '#ddd'
String newData = dataNode.getWholeData().replaceAll(defaultBackground, "backgroundColor:'#ddd'");
// set new data contents
dataNode.setWholeData(newData);
}
}
}
System.out.println(doc.toString());
輸出
<script>StackExchange.docs.comments.init({highlightColor: '#F4A83D',backgroundColor:'#ddd',});</script>