web-dev-qa-db-fra.com

Java - Obtenir du texte dans une balise de script à l'aide de Jsoup

J'utilise la bibliothèque Jsoup pour lire une URL. Cette URL contient du texte dans quelques balises <script>. Est-il possible pour moi d'obtenir le texte dans chaque balise <script>? Veuillez noter que je ne demande pas à analyser un fichier Javascript car je sais déjà que JSoup ne le permet pas. Le code source de l'URL contient du texte dans une balise de script, j'en ai besoin.

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());
}

Voici à quoi ressemble l'une des balises de script à partir du code source:

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

Oui. Vous pouvez utiliser Element # getElementsByTag () pour obtenir toutes les balises script. Chaque balise de script sera représentée par le 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("-------------------");            
  }
24
Ken Chan

Vous pouvez également utiliser la méthode Element#html() qui renvoie le code HTML interne d’un élément.

Depuis 1.11.1 : Utilisez la méthode Element#selectFirst() efficace pour trouver l’élément de script.

 Document doc = Jsoup.connect ("http://www.example.com") .timeout (10000) .get (); 
 Elément scriptElement = doc.selectFirst ("script") ; 
 
 // N'oubliez pas de vérifier scriptElement  n'est pas null ... 
 
 String jsCode = scriptElement.html (); 

Jusqu'à Jsoup 1.10.3 : Combinez Element#select() et Elements#first() appelle pour trouver l'élément de script.

 Document doc = Jsoup.connect ("http://www.example.com") .timeout (10000) .get (); 
 Elément scriptElement = doc.select ("script") .first (); 
 
 // N'oubliez pas de vérifier scriptElement  n'est pas null ... 
 
 String jsCode = scriptElement.html (); 
21
Stephan
Document doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
for (Element script : scripts) {
    System.out.println(script.data());
}
7
Mojtabye

Selon votre cas, la solution sera la suivante.

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