2017-01-19 97 views
1

我想用文字頁面上選擇一個腳本標籤包含Jsoup沒有選擇的腳本標記

Document doc=jsoup.parse(somehtml); 
Elements ele=doc.select("script:contains(accountIndex)"); 

代碼的網頁上的腳本標籤

<script>(function() {var vm = ko.mapping.fromJS({ 
"accountIndex": 1, 
"accountNumber": "*******", 
"hideMoreDetailsText": "Hide More Details", 
"viewAccountNumberText": "Show Account Number", 
"hideAccountNumberText": "Hide Account Number", 
});window.AccountDetails = vm;})();</script> 

我能夠選擇該腳本標籤,如果我傳似

script標籤的CSS定位
Elements ele=doc.select("body > script:nth-child(44)"); 

有在頁面上許多腳本標記,以便第二個方法不是通用的,將來可能會改變。

有人能告訴什麼是與第一approach.Because我能夠在頁面上選擇其他變量與包含jsoup的

回答

2

的選擇:contains(text)查找具有該文本值的元素。腳本沒有文本,它有數據(否則JS將在瀏覽器中可見)。您可以改用:containsData(data)選擇器。

例如爲:

Elements els = doc.select("script:containsData(accountIndex)"); 

這裏是一個exampleSelector documentation具有所有處理過的查詢類型(這不僅僅是嚴格的CSS)。

+0

它的工作!非常感謝!腳本沒有文本,它有數據,它真的有明確的解釋,爲什麼這是行不通的。 – Ravi

+0

還有1個問題,許多隱藏標籤也被jsoup解析。儘管它們沒有顯示在瀏覽器中,那麼爲什麼jsoup將它們的內容視爲文本,而不是將腳本標籤內容視爲文本。 – Ravi

+0

像什麼,例如? –

1

jsoup只支持CSS選擇器的問題,以及那些只允許您選擇基於關於DOM元素的CSS類和屬性,而不是它們的文本內容(CSS selector based on element text?)。你可以嘗試使用另一個框架解析和查詢HTML,例如XOM和TagSoup喜歡這裏描述:https://stackoverflow.com/a/11817487/7433999

或者你可以像這樣的CSS類添加到youc腳本標籤:

<script class="class1"> 
// script1 
</script> 
<script class="class2"> 
// script2 
</script> 

然後你就可以使用jsoup通過CSS再次選擇腳本標籤:

Elements elements = document.select("script.class1"); 
+0

Jsoup允許基於文本包含的選擇,因爲我可以通過相同的選擇其他元素。 – Ravi