2016-10-02 122 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?还是其他想法? –