flutter: obtención de contenido HTML inesperado con webview

CorePress2024-01-24  13

Estoy intentando obtener el código fuente del contenido de la URL utilizando el complemento Flutter Webview... y escribí este código para obtener el resultado esperado, pero no sé por qué este código devuelve contenido inesperado de una línea...

Mi código

import 'dart:async';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

const kAndroidUserAgent =
    'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36';


class mainController{
  Future getdata() async{
    var data;

    final flutterWebViewPlugin = FlutterWebviewPlugin();

    flutterWebViewPlugin.launch('https://www.instagram.com/picsart/?__a=1', hidden: true, userAgent: kAndroidUserAgent,);
     data =  await flutterWebViewPlugin.evalJavascript("window.document.getElementsByTagName('html')[0].outerHTML;");
    flutterWebViewPlugin.close();
    return data;
  }
}

Resultado que obtengo

I/flutter (21310): "\u003Chtml>\u003Chead>\u003C/head>\u003Cbody>\u003C/body>\u003C/html>"

lo que esperaba es...

¿Estás intentando simplemente obtener datos JSON de Instagram? ¿Por qué necesitas usar FlutterWebView para eso? No estás accediendo a una página web.

- ReyHaynes

27/03/2021 a las 18:52

@ReyHaynes porque solo se puede acceder a algunas URL gráficas de Instagram cuando el usuario inicia sesión y no podemos hacerlo con una simple llamada a la API... y además Instagram no permite acceder a las cookies del usuario

- Nalin Nishant

27/03/2021 a las 18:55



------------------------------------

Estaba intentando mucho para obtener una respuesta. Y encontré una solución. A continuación se muestra la solución que encontré.

data =  await flutterWebViewPlugin.evalJavascript("encodeURIComponent(document.documentElement.outerHTML)");
data = Uri.decodeComponent(data);

Lo que hace es, codifique el componente en JavaScript antes de traerlo. Luego, decodifica los datos en dart.

Funcionó cuando uso el complemento webview_flutter. Probablemente funcionará aquí también.

Sé que llego tarde, pero agrego una respuesta para las personas que podrían tener el mismo problema y terminar aquí.

1

1

¡¡¡Eres el mejor!!! He estado luchando durante horas...

-Canadá2000

4 de noviembre de 2021 a las 5:36



------------------------------------

Esa es una fuente de datos JSON, no una página web. Lo que ese complemento intenta hacer es ver la página como una página web y eso alterará el formato de datos JSON.

Utilice http como se describe en el libro de recetas de Flutter: https://flutter.dev/docs/cookbook/networking/fetch-data

5

porque solo se puede acceder a algunas API gráficas de Instagram cuando el usuario inicia sesión y no podemos hacerlo con una simple llamada a la API... y además Instagram no permite acceder a las cookies del usuario

- Nalin Nishant

27/03/2021 a las 18:57

Bueno, para acceder a la API de Instagram, debes pasar por el proceso de configuración adecuada de las credenciales o estarías infringiendo sus TOS. Su única otra esperanza es que ya hayan iniciado sesión a través de una computadora de escritorio.

- ReyHaynes

27/03/2021 a las 18:59

Acabo de poder recuperar los datos json pero todavía estoy enfrentando lUn pequeño problema... ¿puedes ayudarme a descubrirlo?

- Nalin Nishant

27/03/2021 a las 19:01

Creo que no estás entendiendo el punto. Puede ver los datos en su computadora porque ha iniciado sesión en el mismo entorno del navegador. Cualquier intento más allá de eso no funcionará porque necesita sus credenciales para aprobar su autenticación. Si está bien, utilice el método http mencionado para obtener datos JSON.

- ReyHaynes

27 de marzo de 2021 a las 19:05

noop, no me falta ningún punto, le pediré al usuario que inicie sesión de acuerdo con los TOS de mi aplicación y almacenaré la sesión y las cookies en una vista web de la aplicación y luego, cuando el usuario necesite calcular algunos estados relacionados con su perfil, mi aplicación hará el fondo. solicitud en la URL API de Instagram a través de una sesión existente y una cookie

- Nalin Nishant

27/03/2021 a las 19:07

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare