我试图通过一个例子来学习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);
}
}
答案 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>
我已经测试了这段代码,它显示了整个页面。