Jsoup没有加载完整的HTML页面,它只加载部分

时间:2016-10-02 16:01:44

标签: android jsoup

我试图通过一个例子来学习Jsoup,我正在尝试在异步任务中加载网站URL。但它只加载部分而不是完整的HTML页面。我想删除一些组件,如页眉,页脚等,并让它显示在WebView上。不确定可能缺少什么:

我尝试了多种选择:

选项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);
    }
}

2 个答案:

答案 0 :(得分:1)

在页面加载后,许多网页通过异步JavaScript调用加载并呈现其他内容。 JSoup只返回页面的初始HTML。

如果您需要处理动态加载和呈现内容的页面,则需要一组不同的工具,例如htmlunit,但htmlunit只能在您的后端代码中使用。

答案 1 :(得分:0)

我发现问题不是Jsoup 问题是Android Studio

Jsoup加载完整的HTML页面没有任何问题。但是,如果您尝试使用Log.i()或其他一些Log方法在Android Studio控制台中打印长HTML页面,那么此页面将在某些时候被切断。

显然,Android Studio会限制您可以在其控制台中打印的文本数量。

因此,我的建议是在TextView内的ScrollView内显示收到的HTML。在Kotlin中,代码如下:

fun getWebPage(){
    Thread(Runnable {
        var doc = ""
        try {
            val url = "https://jsoup.org/discussion"
            doc = Jsoup.connect(url).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().toString()
        } catch (e: IOException) {
            Log.e("Error:", e.message)
        }

        activity!!.runOnUiThread(Runnable { textView.text = doc })

    }).start()
}

用于显示它的xml是:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".JsopFragment">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Result ..."
        android:textColor="#000000"
        android:textSize="14sp"/>
</ScrollView>

我已经测试了这段代码,它显示了整个页面。