25

我正在使用 Jsoup 库来读取 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>
4

4 回答 4

28

是的。您可以使用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("-------------------");            
  }
于 2013-05-28T02:04:21.743 回答
28

或者,您可以使用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() ; 
于 2014-01-01T22:08:30.903 回答
8
Document doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
for (Element script : scripts) {
    System.out.println(script.data());
}
于 2016-04-25T11:41:46.597 回答
2

根据您的情况,解决方案如下。

Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
Elements scripts = doc.select("script");

for (Element script : scripts) {
    String type = script.attr("type");
    if (type.contentEquals("text/javascript")) {
        String scriptData = script.data(); // your text from the script
        break;
    }
}
于 2019-01-30T08:25:22.757 回答