首先要使用js交互就需要懂原理:
感谢大佬:js中document节点获取页面元素的六种方式
1.querySelector()方法
描述:本方法用于根据给定的选择器选中页面元素
如果有多个元素满足条件,则返回第一个满足条件的元素节点
语法:document.querySelector('选择器名');
注意:如果查找失败,返回null
2.querySelectorAll()方法
描述:本方法用于根据给定的选择器选中页面元素
如果有多个元素满足条件,则返回这些元素构成的集合
语法:document.querySelectorAll('选择器名');
注意:
(1)返回的结果是一个节点列表,不是数组,但能够像使用数组一样使用列表
(2)如果查找失败,返回一个空的节点列表(.length==0)
document节点获取页面元素
我是第一个div
我是第二个div
我是第三个div
我是p标签
我是h2标签
3.getElementById()方法
描述:根据指定的id名选中页面元素
如果存在多个指定 满足条件元素,则返回第一个元素节点
语法:document.getElementById('id名');
注意:如果查找失败,返回null
4.getElementsByClassName()方法
描述:根据指定的类名选中页面中所有满足条件的元素
语法:document.getElementsByClassName('类名');
注意:返回结果是一个有顺序的节点列表,可以通过索引来访问列表中的元素(索引从0开始)
5.getElementsByTagName()方法
描述:根据指定的标签名选中页面中所有满足条件的元素
语法:document.getElementsByTagName('标签名');
注意:如果参数值为'*',则返回文档中的所有元素
6.getElementsByName()方法
描述:根据指定的name值选中页面中所有满足条件的元素
语法:document.getElementsByName('name属性');
document节点获取页面元素
我是第一个div
我是第二个div
我是第三个div
我是p标签
我是h2标签
然后,使用python也可以,但是作为Android开发,学习新的语言配置环境也是有成本的,自己写的虽然丑但是够用,所以,以下:
mWebView?.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
mWebView?.evaluateJavascript("document.getElementsByTagName('html')[0].innerHTML;") { value ->
Log.e("aaaaa", "load:${url}")
if (lastUrl == url) {
var title = url.substring(url.lastIndexOf("/"), url.length)
mWebView?.evaluateJavascript("document.getElementsByClassName('article-title text-center')[0].innerHTML;") { titleStr ->
if (titleStr.isNotEmpty()) {
title = titleStr
.replace("\"", "")
.replace("?", "")
.replace("?", "")
.replace("\\n", "")
.replace("/", "、")
}
}
mWebView?.evaluateJavascript("document.getElementById('article-content').innerHTML;") { contentStr ->
val file = File(
Environment.getExternalStorageDirectory()
.toString() + File.separator + "html/" + "$title.html"
)
val content = contentStr
.replace("\\u003C", "<")
.replace("\\n", "")
.replace("\\\"", "\"")
val fw = FileWriter(file)
fw.write(getHtmlData(content))
fw.close()
Log.e("aaaaa", "${file.absolutePath}保存成功!")
endCheck()
}
} else if (value.contains("你访问的资源找不到了")) {
Log.e("aaaaa", "${url}页面无法访问。。。")
endCheck()
}
lastUrl = url
}
super.onPageFinished(view, url)
}
}
fun getHtmlData(bodyHTML: String?): String {
val head = "" +
"" +
"" +
"" +
""
return "$head$bodyHTML";
}
只是能完成任务,没有仔细打磨,很粗糙,不过还是那句话,丑但是够用,需要的话可以打磨一下,就没有那么丑了。