Intereting Posts
Как удалить содержимое текстового файла без удаления View.setFocusable () и View.setClickable () имеют противоположный эффект в пользовательском массиве ArrayAdapter Невозможно одновременно обрабатывать события click и touch Android – Что-нибудь похожее на обратные вызовы делегатов iPhone SDK? Как создать собственный менеджер загрузок в android 2.2 ADT не позволит создавать Android-активность Как преобразовать HashMap в json Array в android? Android – Firebase – TaskSnapshot – Доступ к методу должен осуществляться только в пределах частного пространства? Как использовать панель инструментов для реагирования на собственное приложение для Android Событие нажатия кнопки для виджета Android Плохой токен окна менеджера окон Эффект поднятия Android L в Pre L (только с использованием свойства высоты) Espresso: return boolean, если вид существует Нет предложений по умолчанию в Eclipse Juno ProgressDialog не отображается, когда AsyncTask.get () называется

Можно ли получить код HTML из WebView

Я бы хотел упреждающе получить HTML-код веб-страницы, который должен быть загружен в webView , проанализировать его с помощью регулярного выражения и отобразить только код HTML, который я хочу, и пусть веб-страница все еще считает, что она загрузила все.

Есть ли способ сделать это в WebViewClient.onLoadResource() или аналогичных методах?

EDIT: Я пробовал это:

 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(); 

Интерфейс никогда не называется

Solutions Collecting From Web of "Можно ли получить код HTML из WebView"

Пришлось использовать HttpClient. Не требуется куки, просто разбор для html:

 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); } } в 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); } } 

Вот учебник по извлечению HTML из WebView , не забудьте прочитать предупреждение в конце учебника.

Попробуйте добавить @JavascriptInterface перед public void showHTML (String html, контекст контекста)

Если у вас есть возможность влиять на серверную часть, на которой вы получаете страницу, вы можете попросить перенаправить ее на конкретную страницу в случае ошибки. В вашем WebViewClient вы можете обнаружить это перенаправление и использовать его в качестве сигнала ошибки.