Intereting Posts
Android notifyDataSetChanged Лучшая практика хранения данных в памяти и базе данных одновременно на Android Недопустимый package.json в пользовательском плагине corova Ограничение масштаба при увеличении зума андроида Использует ли однопользовательское приложение многоядерное в android? Ошибка: screenSize | smallestScreenSize android studio Целевой SDK 23 При использовании Chrome DevTools приложение Кордовы падает с ошибкой Фильтр яркости экрана Как сделать представление заполнить пространство, доступное для него? Закрытый пользовательский диалог Android Каков ваш опыт работы с веб-приложениями Android (ограничения, советы, рекомендации)? GetItemAtPosition () Как получить читаемые данные из выбранного элемента в ListView Добавление ключей release в экспериментальный плагин Gradle для Android Galaxy Tab 10.1 полезное разрешение экрана (- строка меню) Обнаружение тегов NFC не вызывает onNewIntent, и он запускает из основной активности

Можно ли получить код 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 вы можете обнаружить это перенаправление и использовать его в качестве сигнала ошибки.