【问题标题】:WebView Crawler navigate to url based on page resultWebView Crawler 根据页面结果导航到 url
【发布时间】: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


【解决方案1】:

从 onReceiveValue 调用您的网址

 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。

你可以试试这个。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2022-11-11
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多