【发布时间】:2020-07-04 07:37:10
【问题描述】:
我正在尝试根据here 描述的要求构建一个网络爬虫,我认为 WebView 将是实现这一点的最合适的方式。
当我需要访问的下一个 URL 基于当前页面的 HTML 内容时,问题似乎出现了。
我正在使用 view.evaluateJavascript 来获取当前页面 HTML 并解析 onReceiveValue 中的 URL 部分,但是我无法导航到 URL,因为 onReceiveValue 无法访问视图。
此外,在 onPageFinished 中使用 loadUrl 也不能很好地工作,因为它甚至在我检索 HTML 内容之前就完成了,因此导航到具有空值的页面
WebView myWebView = new WebView(this);
setContentView(myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
MyJavaScriptInterface jInterface = new MyJavaScriptInterface(this);
myWebView.addJavascriptInterface(jInterface, "HTMLOUT");
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url.equals("http://url.com")) {
final String[] versionString = {
null
};
view.evaluateJavascript("(function(){return window.document.body.outerHTML})();",
new ValueCallback < String > () {
@Override
public void onReceiveValue(String html) {
String result = removeUTFCharacters(html).toString();
Matcher m = r.matcher(result);
versionString[0] = m.group(1);
}
});
String getFullUrl = String.format("https://url.com/getData?v=%s", versionString[0]);
view.loadUrl(getFullUrl);
}
}
});
myWebView.loadUrl("http://url.com");
【问题讨论】:
-
为什么
onReceiveValue不能访问视图? -
你是对的,确实如此
标签: javascript android web-scraping android-webview