2016-10-02 74 views
1

我想學習Jsoup的例子,我想加載一個網站的URL在異步任務。但它只是加載部分而不是完整的HTML頁面。我想刪除一些組件,如頁眉,頁腳等,並讓它顯示在WebView上。不知道什麼可能丟失:Jsoup沒有加載完整的HTML頁面,它只加載部分

我曾嘗試多種選擇:

選項1:

doc = Jsoup.connect("https://jsoup.org/discussion") 
        .header("Accept-Encoding", "gzip, deflate") 
        .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0") 
        .maxBodySize(0) 
        .get(); 

選項2:

  doc = Jsoup.connect("https://jsoup.org/discussion").maxBodySize(0).timeout(50000).get(); 


class PageLoader extends AsyncTask<String, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 
     Document doc = null; 

     try { 
      doc = Jsoup.connect("https://jsoup.org/discussion").maxBodySize(0).timeout(50000).get(); 
      Logging.InfoLog(doc.toString()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
    } 
} 

回答

1

許多網頁的加載和呈現附加內容通過異步JavaScript調用頁面被加載。 JSoup只返回頁面的初始HTML。

如果您需要處理動態加載和呈現內容的頁面,您需要一組不同的工具,如htmlunit,但htmlunit只能在您的後端代碼中工作。

+0

感謝@Andrei Volgin爲您的快速回復。我也會檢查HtmlUnit工具。我正在嘗試從動態,靜態網頁中獲取部分內容。有時候我想刪除頁眉,頁腳等。我想在僅顯示Android WebView頁面的特定部分(即並非完全如此)上顯示頁面。希望我能通過HtmlUnit做到。任何其他好的工具或建議都會非常有幫助。謝謝 –

+0

@Abhrajyoti Kirtania在後臺加載webview,在網站完成加載(包括javascript內容)後刪除/更改內容,調用javascript,然後顯示webview。根據我的經驗,HtmlUnit很慢並且通常仍然無法處理腳本。根據內容有時你也可以使用jsoup和rhino的組合來獲得你想要的。 –

+0

@ F.Klein,我想知道如何加載完整的HTML,我用JSoup嘗試過,但沒有加載完整的HTML頁面,這是主要問題。你能否建議什麼是加載HTML頁面的最佳方式。我希望一旦加載成功,JSoup就可以用來解析頁面,以便完全控制頁面以進行任何類型的修改和自定義。您是否建議通過WebView加載原始html數據,然後通過JSoup將其轉換爲Document?還是其他想法? –