使用 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>