Java – получить текст в теге скрипта с помощью 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 type="text/javascript">
(function() {
...
})();
</script>

person Matt9Atkins    schedule 27.05.2013    source источник


Ответы (4)


да. Чтобы получить все теги 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("-------------------");            
  }
person Ken Chan    schedule 28.05.2013
comment
спасибо, @KenChan, сработало отлично, я использую String scriptdata = node.getWholeData(); Но как получить только второй скрипт на странице? - person Florida; 16.06.2015

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

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

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() вызывает поиск элемента скрипта.

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(); 
person Stephan    schedule 01.01.2014

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

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;
    }
}
person shahrukhcodes    schedule 30.01.2019

person    schedule
comment
Хотя этот код может дать ответ на вопрос, предоставление дополнительного контекста относительно того, почему и/или как он отвечает на вопрос, значительно улучшит его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения. - person Toby Speight; 25.04.2016