Java - Dapatkan teks dalam tag skrip menggunakan Jsoup

Saya menggunakan perpustakaan Jsoup untuk membaca URL. Url ini memiliki teks dalam beberapa <script> tag. Apakah mungkin bagi saya untuk mendapatkan teks dalam setiap tag <script>? Harap dicatat bahwa saya tidak meminta untuk mengurai file Javascript karena saya sudah mengetahui JSoup tidak mengizinkannya. Kode sumber URL sebenarnya memiliki teks di dalam tag skrip, saya memerlukannya.

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

Ini adalah tampilan salah satu tag skrip dari kode sumber:

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

person Matt9Atkins    schedule 27.05.2013    source sumber


Jawaban (4)


Ya. Anda dapat menggunakan Element#getElementsByTag() untuk mendapatkan semua tag script. Setiap tag skrip akan diwakili oleh 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
terima kasih @KenChan, Ini berfungsi dengan sempurna, saya menggunakan String scriptdata = node.getWholeData(); Tetapi karena hanya mendapatkan skrip kedua di halaman? - person Florida; 16.06.2015

Alternatifnya, Anda dapat menggunakan metode Element#html() yang mengembalikan html bagian dalam suatu elemen.

Sejak 1.11.1: Gunakan Element#selectFirst() untuk menemukan elemen skrip.

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

Hingga Jsoup 1.10.3: Gabungkan Element#select() dan Elements#first() memanggil untuk menemukan elemen skrip.

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

Menurut kasus Anda, solusinya adalah seperti di bawah ini.

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
Meskipun kode ini mungkin menjawab pertanyaan tersebut, memberikan konteks tambahan mengenai mengapa dan/atau bagaimana menjawab pertanyaan tersebut akan meningkatkan nilai jangka panjangnya secara signifikan. Harap edit jawaban Anda untuk menambahkan beberapa penjelasan. - person Toby Speight; 25.04.2016