是否有可能从WebView获取HTML代码

我想抢先获得一个网页的HTML代码,要加载到一个webView ,parsing它使用正则expression式,只显示我想要的HTML代码,而让网页仍然认为它已经加载了一切。

WebViewClient.onLoadResource()或类似的方法有没有办法做到这一点?

编辑:我试过这个:

 class MyJavaScriptInterface { @SuppressWarnings("unused") public void showHTML(String html, Context context) { new AlertDialog.Builder(context) .setTitle("HTML") .setMessage(html) .setPositiveButton(android.R.string.ok, null) .setCancelable(false) .create(); pageHTML = html; } } @Override public void customizeWebView(final ServiceCommunicableActivity activity, final WebView webview, final SearchResult mRom) { mRom.setFileSize(getFileSize(mRom.getURLSuffix())); webview.getSettings().setJavaScriptEnabled(true); MyJavaScriptInterface interfaceA = new MyJavaScriptInterface(); webview.addJavascriptInterface(interfaceA, "HTMLOUT"); WebViewClient anchorWebViewClient = new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { /* This call inject JavaScript into the page which just finished loading. */ webview.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); Pattern pattern = Pattern.compile("<h2>Winning Sc.+</h2></div>(.+)<br>", Pattern.DOTALL); Matcher matcher = pattern.matcher(pageHTML); matcher.find(); 

界面从不被调用

只好使用HttpClient。 不需要cookies,只需parsinghtml:

 private String getDownloadButtonOnly(String url){ HttpGet pageGet = new HttpGet(url); ResponseHandler<String> handler = new ResponseHandler<String>() { public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { HttpEntity entity = response.getEntity(); String html; if (entity != null) { html = EntityUtils.toString(entity); return html; } else { return null; } } }; pageHTML = null; try { while (pageHTML==null){ pageHTML = client.execute(pageGet, handler); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Pattern pattern = Pattern.compile("<h2>Direct Down.+?</h2>(</div>)*(.+?)<.+?>", Pattern.DOTALL); Matcher matcher = pattern.matcher(pageHTML); String displayHTML = null; while(matcher.find()){ displayHTML = matcher.group(); } return displayHTML; } @Override public void customizeWebView(final ServiceCommunicableActivity activity, final WebView webview, final SearchResult mRom) { mRom.setFileSize(getFileSize(mRom.getURLSuffix())); webview.getSettings().setJavaScriptEnabled(true); WebViewClient anchorWebViewClient = new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); String downloadButtonHTML = getDownloadButtonOnly(url); if(downloadButtonHTML!=null && !url.equals(lastLoadedURL)){ lastLoadedURL = url; webview.loadDataWithBaseURL(url, downloadButtonHTML, null, "utf-8", url); } } 

这里是一个从WebView中提取HTML的教程,不要忘记在本教程结束时阅读警告。

尝试添加@JavascriptInterface public void showHTML(String html,Context context)

如果您有机会影响从其接收网页的服务器部分,则可以要求在发生错误时redirect到特定页面。 在你的WebViewClient中,你可以检测到这个redirect,并使用它的错误信号。