我正在尝试在包含
的文本的页面上选择一个脚本标记Document doc=jsoup.parse(somehtml);
Elements ele=doc.select("script:contains(accountIndex)");
页面上的脚本标记代码是
<script>(function() {var vm = ko.mapping.fromJS({
"accountIndex": 1,
"accountNumber": "*******",
"hideMoreDetailsText": "Hide More Details",
"viewAccountNumberText": "Show Account Number",
"hideAccountNumberText": "Hide Account Number",
});window.AccountDetails = vm;})();</script>
如果我传递脚本标记的css定位器,我可以选择此脚本标记,如
Elements ele=doc.select("body > script:nth-child(44)");
页面上有许多脚本标记,因此第二种方法不是通用的。将来可能会改变。
有人可以告诉第一种方法有什么问题。因为我能够在包含jsoup的页面上选择其他标签
答案 0 :(得分:3)
选择器:contains(text)
查找具有 text 值的元素。脚本没有文本,它有数据(否则JS将在浏览器中可见)。您可以改用:containsData(data)
选择器。
E.g:
Elements els = doc.select("script:containsData(accountIndex)");
这是一个example。 Selector documentation具有所有处理的查询类型(不仅仅是严格的CSS)。
答案 1 :(得分:1)
jsoup只支持CSS选择器,这些只允许您根据DOM元素的CSS类和属性选择,而不是它们的文本内容(CSS selector based on element text?)。您可以尝试使用另一个框架来解析和查询HTML,例如XOM和TagSoup,如下所述:https://stackoverflow.com/a/11817487/7433999
或者您可以将CSS类添加到youc脚本标记中,如下所示:
<script class="class1">
// script1
</script>
<script class="class2">
// script2
</script>
然后您可以使用jsoup:
通过CSS再次选择脚本标签Elements elements = document.select("script.class1");