WebView 爬虫根据页面结果导航到 url

WebView Crawler navigate to url based on page result

我正在尝试根据所描述的要求构建网络爬虫 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

调用你的 url
 myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if (url.contains("https://www.google.com")) {
                final String[] versionString = {
                        null
                };
                view.evaluateJavascript("(function(){return window.document.body.outerHTML})();",
                        new ValueCallback< String >() {
                            @Override
                            public void onReceiveValue(String html) {

                                String getFullUrl = String.format("https://cchat.in", versionString[0]);
                                view.loadUrl(getFullUrl);
                            }
                        });

            }
        }
    });
    myWebView.loadUrl("https://www.google.com");

我用了2个网站来演示。我可以从 onReceiveValue.

调用第二个 URL

你可以试试这个。