Cómo recuperar el contenido HTML de WebView (como una cadena)

¿Cómo puedo recuperar todo el contenido HTML que se muestra actualmente en un WebView?

Encontré WebView.loadData() pero no pude encontrar el equivalente opuesto (por ejemplo, WebView.getData ())

Tenga en cuenta que estoy interesado en recuperar los datos de las páginas web que no tengo control sobre (es decir, no puedo inyectar una función de JavaScript en esas páginas, por lo que llamaría una interfaz de Javascript en WebView).

Desafortunadamente no hay manera fácil de hacer esto.

Consulte ¿Cómo obtengo el contenido de la página web desde un WebView?

Usted podría apenas hacer un HttpRequest a la misma página que su WebView y conseguir la respuesta.

Usted puede lograr esto a través de:

 final Context myApp = this; /* An instance of this class will be registered as a JavaScript interface */ class MyJavaScriptInterface { @SuppressWarnings("unused") public void processHTML(String html) { // process the html as needed by the app } } final WebView browser = (WebView)findViewById(R.id.browser); /* JavaScript must be enabled if you want it to work, obviously */ browser.getSettings().setJavaScriptEnabled(true); /* Register a new JavaScript interface called HTMLOUT */ browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); /* WebViewClient must be set BEFORE calling loadUrl! */ browser.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { /* This call inject JavaScript into the page which just finished loading. */ browser.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); } }); /* load a web page */ browser.loadUrl("http://lexandera.com/files/jsexamples/gethtml.html"); 

Usted recibirá el contnet Html entero en el método processHTML. Y no hará otra solicitud para la página web. Por lo que también es una manera más eficiente de hacer esto.

Gracias.

 webView.evaluateJavascript("(function(){return window.document.body.outerHTML})();", new ValueCallback<String>() { @Override public void onReceiveValue(String html) { } }); 

Puede interceptar las solicitudes HTTP hechas por WebView y, a continuación, modificar el código HTML para incluir las funciones JavaScript que necesita para comunicarse con la página HTML. Usted intercepta las peticiones HTTP a través del método WebInterceptRequest () de WebViewClient.

Utilizando este mecanismo, puede acceder a la página cargada cargando usted mismo, modificarlo antes de pasarlo a WebView, e incluso almacenarlo en caché localmente si lo desea.

Puede pasar datos a través de JavaScriptInterface de webview .. he hecho esto. Guardar los datos a una variable estática y luego procesar bajo android applcation

Agregue esto a su código:

 private String getUrlSource(String site) throws IOException { //GNU Public, from ZunoZap Web Browser URL url = new URL(site); URLConnection urlc = url.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader( urlc.getInputStream(), "UTF-8")); String inputLine; StringBuilder a = new StringBuilder(); while ((inputLine = in.readLine()) != null) a.append(inputLine); in.close(); return a.toString(); } 

Entonces le permite decir lo que para obtener el origen de Google que haría:

 getURLSource("http://google.com"); 
  • Al seleccionar una imagen, la aplicación se reinicia en S3
  • Appium: ¿Cómo obtener la WEB_VIEW de la aplicación híbrida basada en iónicos?
  • Cómo interceptar datos POST en una vista web de android
  • Android WebView con un video de youtube incrustado, botón de pantalla completa congela video
  • Se rehusó a mostrar un marco porque establecía X-Frame-Options en 'DENY en android webview
  • Appcache en Android Webview no descargar fuentes
  • Cómo pasar un objeto Blob de javascript a Android?
  • La forma de Córdoba no se envía o los botones no funcionan (android +4.4)
  • Android WebView - Configuración del enfoque de campo HTML con Javascript
  • Desarrollo de Android: Uso de la imagen de activos en un HTML de WebView
  • WebSocket en Android WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.