web-dev-qa-db-ja.com

Java-Jsoupを使用してスクリプトタグ内のテキストを取得します

Jsoupライブラリを使用してURLを読み取っています。このURLのテキストは、いくつかの<script>タグ内にあります。各<script>タグ内のテキストを取得することは可能ですか? JSoupがそれを許可していないことをすでに知っているので、私はJavascriptファイルを解析するよう求めていないことに注意してください。 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());
}

これは、ソースコードからのスクリプトタグの1つです。

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

はい。 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("-------------------");            
  }
24
Ken Chan

または、要素の内部HTMLを返す Element#html() メソッドを使用することもできます。

1.11.1以降効率的な Element#selectFirst() メソッドを使用して、スクリプト要素

ドキュメントdoc = Jsoup.connect( "http://www.example.com").timeout(10000).get(); 
 Element scriptElement = doc.selectFirst( "script") ; 
 
 //確認することを忘れないでください scriptElement is not null ... 
 
 String jsCode = scriptElement。html(); 

Jsoup 1.10.3まで結合 Element#select() および- Elements#first() スクリプト要素を見つけるための呼び出し。

ドキュメントdoc = Jsoup.connect( "http://www.example.com").timeout(10000).get(); 
 Element scriptElement = doc.select( "script") .first(); 
 
 //チェックすることを忘れないでください scriptElement is not null ... 
 
 String jsCode = scriptElement。html(); 
23
Stephan
Document doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
for (Element script : scripts) {
    System.out.println(script.data());
}
7
Mojtabye

あなたのケースによると、解決策は以下のようになります。

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