Java - รับข้อความภายในแท็กสคริปต์โดยใช้ Jsoup

ฉันใช้ไลบรารี Jsoup เพื่ออ่าน URL URL นี้มีข้อความภายในแท็ก <script> สองสามแท็ก เป็นไปได้ไหมที่ฉันจะรับข้อความภายในแท็ก <script> แต่ละแท็ก โปรดทราบว่าฉันไม่ได้ขอให้แยกวิเคราะห์ไฟล์ Javascript เนื่องจากฉันทราบอยู่แล้วว่า JSoup ไม่อนุญาต ซอร์สโค้ดจริงของ URL มีข้อความอยู่ในแท็กสคริปต์ ฉันต้องการสิ่งนั้น

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)


ใช่. คุณสามารถใช้ Element#getElementsByTag() เพื่อรับ แท็ก 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