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>
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("-------------------");
}
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 ();
Document doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
for (Element script : scripts) {
System.out.println(script.data());
}
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
}
}