Java - 使用 Jsoup 获取脚本标签内的文本

新手上路,请多包涵

我正在使用 Jsoup 库读取 URL。此 url 在几个 <script> 标记中包含文本。我是否有可能获得每个 <script> 标签中的文本?请注意,我不要求解析 Javascript 文件,因为我已经知道 JSoup 不允许这样做。 URL 的实际源代码在脚本标记中包含文本,我需要它。

 doc = Jsoup.connect("http://www.example.com").timeout(10000).get();

Element div = doc.select("script").first();
for (Element element : div.children()) {
System.out.println(element.toString());
}

这是源代码中脚本标签之一的样子:

 <script type="text/javascript">
(function() {
...
})();
</script>

原文由 M9A 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

是的。您可以使用 Element#getElementsByTag() 获取所有 script 标签。每个脚本标签将由 DataNode 表示。

  Document doc =Jsoup.connect("http://stackoverflow.com/questions/16780517/java-obtain-text-within-script-tag-using-jsoup").timeout(10000).get();
 Elements scriptElements = doc.getElementsByTag("script");

 for (Element element :scriptElements ){
        for (DataNode node : element.dataNodes()) {
            System.out.println(node.getWholeData());
        }
        System.out.println("-------------------");
  }

原文由 Ken Chan 发布,翻译遵循 CC BY-SA 3.0 许可协议

或者,您可以使用 Element#html() 返回元素内部 html 的方法。

从 1.11.1 开始: 使用高效的 Element#selectFirst() 方法来查找脚本元素。

文档 doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
元素 scriptElement = doc.selectFirst("script");

// 不要忘记检查scriptElement是否为空...

字符串 jsCode = scriptElement. html() ;

直到 Jsoup 1.10.3结合 Element#select()Elements#first() 调用以查找脚本元素。

文档 doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
元素 scriptElement = doc.select("script").first();

// 不要忘记检查scriptElement是否为空...

字符串 jsCode = scriptElement. html() ;

原文由 Stephan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题