如何使用Jsoup获取页面中所有带src属性的script标签
现有实现缺失的逻辑
你的代码存在3个核心问题,导致无法拿到所有script标签的src属性:
- 没有针对
src属性做筛选,遍历范围包含了所有内联script标签(即没有src、直接写脚本内容的标签) - 取值逻辑错误,调用
data()方法只能获取标签内部的文本内容,没有调用属性读取方法获取src值 - 循环中加了
break关键字,匹配到第一个type为text/javascript的script就会终止遍历,无法拿到全部符合要求的标签
调整后的实现
可以直接用Jsoup的属性选择器精准筛选目标标签,省去冗余的类型判断,代码如下:
Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get(); // 选择所有带src属性的script标签 Elements scripts = doc.select("script[src]"); for (Element script : scripts) { // 读取src属性值,如果需要获取带域名的完整绝对路径,换成script.absUrl("src")即可 String srcValue = script.attr("src"); // 按需处理拿到的src值,比如存入集合、打印等 System.out.println(srcValue); }
可选扩展
如果需要严格过滤仅JS类型的外部脚本,可以把选择器替换为script[src][type="text/javascript"],注意现在默认不带type属性的script标签都会被浏览器识别为JavaScript脚本,非特殊场景不需要加这个过滤条件。
内容的提问来源于stack exchange,提问作者Rqs
相关产品推荐
相关产品推荐

