Jsoup 没有选择脚本标签

Jsoup is not Selecting Script Tag

我正在尝试 select 页面上的脚本标签,文本包含

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 脚本标签的定位器,我可以 select 这个脚本标签,例如

  Elements ele=doc.select("body > script:nth-child(44)");

页面上有很多脚本标签,所以第二种方法不是generic.It以后可能会改变。

谁能告诉我第一个有什么问题 approach.Because 我可以 select 包含 jsoup

的页面上的其他标签

jsoup 仅支持 CSS select 或那些只允许您 select 基于 CSS 类 和 [=23 的属性=] 元素,而不是它们的文本内容 (CSS selector based on element text?). You could try using another framework for parsing and querying the HTML, for example XOM and TagSoup like described here:

或者您可以像这样将 CSS 类 添加到您的脚本标签中:

<script class="class1">
// script1
</script>
<script class="class2">
// script2
</script>

然后您可以 select 使用 jsoup 通过 CSS 再次脚本标记:

Elements elements = document.select("script.class1");

选择器 :contains(text) 查找具有 text 值的元素。脚本没有文本,它有数据(否则 JS 将在浏览器中可见)。您可以改用 :containsData(data) 选择器。

例如:

Elements els = doc.select("script:containsData(accountIndex)");

这是一个 example. The Selector documentation 具有所有处理的查询类型(这不仅仅是严格的 CSS)。