我想在Kotlin中打开一个网站并以编程方式登录。然后我想以编程方式打开该网站的不同页面,并使用JavaScript读取它们的信息,并将它们保存在Kotlin的一些变量中。
到目前为止,我已经使用了web视图,我可以使用以下代码以编程方式登录网站:
var webview = WebView(this)
webview.settings.javaScriptEnabled = true
webview.settings.domStorageEnabled = true
webview.webViewClient = object: WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
webview.loadUrl("javascript: {" +
"document.getElementById('TXT_UserName').value = '" + password + "';" +
"document.getElementById('TXT_Password').value = '" + password + "';" +
"var frms = document.getElementById('btn_Login').click(); };")
}
})
}
}
webview.loadUrl("http://10.104.24.64/")
我知道通过使用onPageFinished函数,我可以了解第一页何时加载完毕。但我不知道其他页面何时加载完毕。这对我来说很重要,因为在完全加载之前,我无法读取它们的信息,JavaScript返回null。而且我不知道如何通过编程从第一页打开到其他页面的链接。下面的代码在JavaScript中成功执行:但在Kotlin中返回null。
val script = "var t= document. getElementById ('ContentPlaceHold');"
+"t.name"
webview. evaluateJavascript(script, object : ValueCallback<String> {
override fun onReceiveValue(value: String) {
//to save JavaScript variables in to Kotlin variables here
}
})
我认为这是因为Kotlin的代码是异步执行的。有人能帮我吗?提前感谢。
1条答案
按热度按时间e3bfsja21#
感谢Gabe Sechan,我用Jsoup scraper解决了这个问题。