Java - Получить текст в теге script с помощью Jsoup - программирование
Подтвердить что ты не робот

Java - Получить текст в теге script с помощью Jsoup

Я использую библиотеку Jsoup для чтения URL-адреса. Этот url имеет текст в нескольких тегах <script>. Возможно ли получить текст в каждом теге <script>? Обратите внимание, что я не прошу проанализировать Javascript файл, поскольку я уже знаю, что JSoup этого не позволяет. Фактический исходный код URL-адреса имеет текст в теге script, мне это нужно.

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 из исходного кода:

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

Ответ 1

Да. Вы можете использовать элемент # getElementsByTag(), чтобы получить все теги script. Каждый тег 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("-------------------");            
  }

Ответ 2

В качестве альтернативы вы можете использовать метод Element#html() который возвращает внутренний html элемента.

Начиная с 1.11.1: используйте эффективный метод Element#selectFirst() для поиска элемента script.

Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
Element scriptElement = doc.selectFirst("script");

// Don't forget to check scriptElement is not null...

String jsCode = scriptElement.html(); 

До Jsoup 1.10.3: Объедините вызовы Element#select() и Elements#first() чтобы найти элемент script.

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

// Don't forget to check scriptElement is not null...

String jsCode = scriptElement.html(); 

Ответ 3

Document doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
for (Element script : scripts) {
    System.out.println(script.data());
}

Ответ 4

В зависимости от вашего случая решение будет таким, как показано ниже.

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
            }
}