Page 2 of 5

Re: Capturar pagina html y recuperar resultado

Posted: Wed Sep 18, 2024 3:51 pm
by leandro
Antonio buenos días como estas, que pena molestar de nuevo.

Pero quería saber si ya tienes las lib de FW2407 con la actualización del webview2 para poder implementar esta solución en la app. :D

Gracias de antemano.

Pdta. las necesitamos en 32 y 64 bits :oops:

Re: Capturar pagina html y recuperar resultado

Posted: Wed Oct 02, 2024 8:01 pm
by leandro
Antonio primero que todo agradecerte por la ayuda con este tema, ya que nos enviaste la actualización con la revisión del webview2, estamos intentando hacer la implementación de la solución para nuestros clientes, pero tenemos el problema que el código funciona de maravilla si lo compilamos solito en la carpeta samples del fw2409, pero cuando lo integramos a nuestra app, nos arroja un error, creo que puede ser referente a alguna librería que nos hace falta enlazar, de antemano gracias.

el código:

Code: Select all | Expand

#include "FiveWin.ch"

function consulta(cTerc)

   local oWnd, cResult, oWebView
   local cConsulta := space(0)
   DEFAULT cTerc := "79760202"

   cConsulta := "consultaDIAN( '"+cTerc+"' )"   

   TEXT INTO cResult
      [ document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:primerNombre' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:otrosNombres' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:primerApellido' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:segundoApellido' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:estado' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:dv' ).innerHTML ]
   ENDTEXT    

   DEFINE WINDOW oWnd TITLE "Usando DIAN desde un webview" SIZE 1050, 700
   oWnd:Hide()
   
   oWebView = TWebView2():New( oWnd )
   oWebView:bOnNavigationCompleted = { | cUrl, hWebView | If( "sessionid" $ cUrl, oWebView:Eval( cResult ),) }

   oWebView:Navigate( "https://muisca.dian.gov.co/WebRutMuisca/DefConsultaEstadoRUT.faces" )
   oWebView:InjectJavascript( JavaScript() )
   oWebView:bOnEval = { | cJson, hWebView | If( cJson != "null" .and. cJson != "{}", ( MsgInfo( cJson ), oWnd:End() ),) }
   oWebView:Eval(  )

   ACTIVATE WINDOW oWnd CENTER ;
      ON INIT oWnd:Hide() ;
      ON RESIZE oWebView:SetSize( nWidth, nHeight )

   oWebView:End()

return nil

function Javascript()

   local cCode

   TEXT INTO cCode
      function consultaDIAN( numeroIdentificacion )
      {
         var inputNIT = document.getElementById('vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit');
         if (inputNIT) {
            inputNIT.value = numeroIdentificacion;
         } else {
            console.error('No se encontró el campo de entrada para el NIT');
            return;
         }    
         
         var botonBuscar = document.getElementById('vistaConsultaEstadoRUT:formConsultaEstadoRUT:btnBuscar');
         if (botonBuscar) {
            botonBuscar.click();
         } else {
            console.error('No se encontró el botón de búsqueda');
            return;
         }
      }
   ENDTEXT

return cCode
 
El error en nuestra app

Code: Select all | Expand

Application
===========
   Path and name: C:\cmplar_64\hymlyma.exe (64 bits)
   Size: ********* bytes
   Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
   FiveWin  version: FWH 24.07
   C compiler version: LLVM/Clang C 5.0.2 (64-bit)
   Windows 8 64 Bits, version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 10 secs 
   Error occurred at: 02/10/2024, 14:59:07
   Error description: Error BASE/1070  Error de argumento: ==
   Args:
     [   1] = N   0
     [   2] = P   0x1C39685D0C8

Stack Calls
===========
   Called from: .\source\classes\twebview2.prg => (b)WEBVIEW2_ONEVAL( 128 )
   Called from:  => ASCAN( 0 )
   Called from: .\source\classes\twebview2.prg => WEBVIEW2_ONEVAL( 128 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\window.prg => TMDIFRAME:ACTIVATE( 1117 )
   Called from: .\PRG\R32_menu.prg => VTNAPRINCIPAL( 976 )
   Called from: .\PRG\R32_menu.prg => MAIN( 123 )

System
======
   Hardware memory: 32510 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 1
      1 ,                                                                                                     

Variables in use
================
   Procedure     Type   Value
   ==========================
   (b)WEBVIEW2_ONEVAL
     Param   1:    O    Class: TWEBVIEW2
     Param   2:    N    1
     Local   1:    N    0
     Local   2:    P    0x1C39685D0C8
     Local   3:    U    
     Local   4:    U    
   ASCAN
     Param   1:    A    Len:    1
     Param   2:    B    {|| ... }
   WEBVIEW2_ONEVAL
     Param   1:    C    "null"
     Param   2:    P    0x1C39685D0C8
     Local   1:    U    
     Local   2:    U    
   WINRUN
     Param   1:    N    132530
   TMDIFRAME:ACTIVATE
     Param   1:    C    "NORMAL"
     Param   2:    U    
     Param   3:    U    
     Param   4:    U    
     Param   5:    U    
     Param   6:    B    {|| ... }
     Param   7:    B    {|| ... }
     Param   8:    B    {|| ... }
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    U    
     Param  13:    U    
     Param  14:    U    
     Param  15:    U    
     Param  16:    U    
     Param  17:    B    {|| ... }
     Param  18:    U    
     Param  19:    U    
     Param  20:    L    .F.
     Local   1:    O    Class: TMDIFRAME
     Local   2:    U    
     Local   3:    U    
   VTNAPRINCIPAL
     Local   1:    C    "Tahoma"
     Local   2:    N    12
     Local   3:    U    
     Local   4:    U    
     Local   5:    U    
     Local   6:    O    Class: TINI
     Local   7:    O    Class: TTIMER
     Local   8:    O    Class: TTIMER


   MAIN
     Local   1:    U    
     Local   2:    U    
     Local   3:    U    
     Local   4:    U    
 

Re: Capturar pagina html y recuperar resultado

Posted: Thu Oct 03, 2024 4:24 am
by cnavarro
Leandro, prueba a quitar esto

Code: Select all | Expand

//  oWebView:Eval(  )
 
y ponerlo en el ON INIT de la ventana

Code: Select all | Expand

.../...

   ON INIT ( oWnd:Hide(),   oWebView:Eval() ) ;

 

Re: Capturar pagina html y recuperar resultado

Posted: Thu Oct 03, 2024 4:31 am
by Antonio Linares
Leandro,

Además de lo que te comenta Cristobal, dos cosas:

1. después de oWebView = TWebView2():New( oWnd ) añade esta línea:

MsgInfo( oWebView:hWebView )

y mira a ver si tiene un handle válido o un cero

2. Cuando llamas a oWebView:Eval( ) no le pasas ningún código javascript a ejecutar ??? Eso es diferente. Tal vez eso afecte...

Re: Capturar pagina html y recuperar resultado

Posted: Thu Oct 03, 2024 9:55 pm
by leandro
Hola buenas tardes...

No se que cambie, pero ahora no funciona ni compilando el prg solito, el que publicaste funcionando en este mismo POST :oops:

El código

Code: Select all | Expand

#include "FiveWin.ch"

static oWebView

function Main()

   local oWnd, cResult

   TEXT INTO cResult
      [ document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:primerNombre' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:otrosNombres' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:primerApellido' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:segundoApellido' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:estado' ).innerHTML,
        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:dv' ).innerHTML ]
   ENDTEXT    

   DEFINE WINDOW oWnd TITLE "Usando DIAN desde un webview" SIZE 1050, 700
   oWnd:Hide()
   
   oWebView = TWebView2():New( oWnd )
   oWebView:bOnNavigationCompleted = { | cUrl, hWebView | If( "sessionid" $ cUrl, oWebView:Eval( cResult ),) }

   oWebView:Navigate( "https://muisca.dian.gov.co/WebRutMuisca/DefConsultaEstadoRUT.faces" )
   oWebView:InjectJavascript( JavaScript() )
   // oWebView:OpenDevToolsWindow()
   oWebView:bOnEval = { | cJson, hWebView | If( cJson != "null" .and. cJson != "{}", ( MsgInfo( cJson ), oWnd:End() ),) }
   oWebView:Eval( "consultaDIAN( '79760202' )" )

   ACTIVATE WINDOW oWnd CENTER ;
      ON INIT oWnd:Hide() ;
      ON RESIZE oWebView:SetSize( nWidth, nHeight )

   oWebView:End()

return nil

function Javascript()

   local cCode

   TEXT INTO cCode
      function consultaDIAN( numeroIdentificacion )
      {
         var inputNIT = document.getElementById('vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit');
         if (inputNIT) {
            inputNIT.value = numeroIdentificacion;
         } else {
            console.error('No se encontró el campo de entrada para el NIT');
            return;
         }    
         
         var botonBuscar = document.getElementById('vistaConsultaEstadoRUT:formConsultaEstadoRUT:btnBuscar');
         if (botonBuscar) {
            botonBuscar.click();
         } else {
            console.error('No se encontró el botón de búsqueda');
            return;
         }
      }
   ENDTEXT

return cCode
 
El error

Code: Select all | Expand


Application
===========
   Path and name: C:\fwh64_2409\samples\leandro6.exe (64 bits)
   Size: 5,665,792 bytes
   Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
   FiveWin  version: FWH 24.07
   C compiler version: LLVM/Clang C 5.0.2 (64-bit)
   Windows 8 64 Bits, version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 0 secs 
   Error occurred at: 10/03/24, 16:43:33
   Error description: Warning BASE/1005  Message not found: TWEBVIEW2:_BONNAVIGATIONCOMPLETED

Stack Calls
===========
   Called from: source\rtl\tobject.prg => TWEBVIEW2:ERROR( 0 )
   Called from: source\rtl\tobject.prg => TWEBVIEW2:MSGNOTFOUND( 0 )
   Called from: source\rtl\tobject.prg => TWEBVIEW2:_BONNAVIGATIONCOMPLETED( 0 )
   Called from: leandro6.prg => MAIN( 22 )

System
======
   Hardware memory: 32510 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 1
      1 ,                                                                                                     

Variables in use
================
   Procedure     Type   Value
   ==========================
   TWEBVIEW2:ERROR
     Param   1:    C    "Message not found"
     Param   2:    C    "TWEBVIEW2"
     Param   3:    C    "_BONNAVIGATIONCOMPLETED"
     Param   4:    N    1005
     Local   1:    U    
     Local   2:    O    Class: TWEBVIEW2
     Local   3:    N    16
   TWEBVIEW2:MSGNOTFOUND
     Param   1:    C    "_BONNAVIGATIONCOMPLETED"
     Param   2:    O    Class: TWEBVIEW2
   TWEBVIEW2:_BONNAVIGATIONCOMPLETED
     Param   1:    B    {|| ... }
   MAIN
     Local   1:    O    Class: TWINDOW
     Local   2:    C    "      [ document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:primerNombre' ).innerHTML,        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:otrosNombres' ).innerHTML,        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:primerApellido' ).innerHTML,        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:segundoApellido' ).innerHTML,        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:estado' ).innerHTML,        document.getElementById( 'vistaConsultaEstadoRUT:formConsultaEstadoRUT:dv' ).innerHTML ]"

Linked RDDs
===========
   DBF
   DBFFPT
   DBFBLOB
   DBFCDX
   DBFNTX

DataBases in use
================

Classes in use:
===============
     1 ERROR
     2 HASHENTRY
     3 HBCLASS
     4 HBOBJECT
     5 TWINDOW
     6 TBRUSH
     7 TFONT
     8 TREG32
     9 TWEBVIEW2

Memory Analysis
===============
      730 Static variables

   Dynamic memory consume:
      Actual  Value:          0 bytes
      Highest Value:          0 bytes
 

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 6:49 am
by Antonio Linares
No estarás enlazando una clase TWebView2 tuya de las publicadas en estos foros ?

Revisa todos tus PRGs a ver si la tienes añadida en alguno

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 1:58 pm
by leandro
cnavarro wrote:Leandro, prueba a quitar esto

Code: Select all | Expand

//  oWebView:Eval(  )
 
y ponerlo en el ON INIT de la ventana

Code: Select all | Expand

.../...

   ON INIT ( oWnd:Hide(),   oWebView:Eval() ) ;

 
Amigo ya hice lo que mencionaste pero nada sigue devolviendo el mismo error
Antonio Linares wrote:Leandro,

Además de lo que te comenta Cristobal, dos cosas:

1. después de oWebView = TWebView2():New( oWnd ) añade esta línea:

MsgInfo( oWebView:hWebView )

y mira a ver si tiene un handle válido o un cero

2. Cuando llamas a oWebView:Eval( ) no le pasas ningún código javascript a ejecutar ??? Eso es diferente. Tal vez eso afecte...
Antonio hicimos lo que mencionas y nos devolvió el siguiente resultado:
Image

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 2:27 pm
by leandro
Bueno redujimos el código a lo mas pequeño posible para intentar encontrar el error, la pagina la carga correctamente pero cuando ingresamos la linea oWebView:InjectJavascript( Javascript() ) crash, se revienta.

Code: Select all | Expand

#include "FiveWin.ch"

static oWebView

consultaDIAN()

function consultaDIAN()

   local oWnd

   DEFINE WINDOW oWnd TITLE "Usando DIAN desde un webview" SIZE 1050, 700
       oWebView = TWebView2():New( oWnd )
       oWebView:Navigate( "https://muisca.dian.gov.co/WebRutMuisca/DefConsultaEstadoRUT.faces" )
       oWebView:InjectJavascript( Javascript() )
   ACTIVATE WINDOW oWnd CENTER ON RESIZE oWebView:SetSize( nWidth, nHeight )

   oWebView:End()

return nil

function Javascript()
   local cCode
   TEXT INTO cCode
      function consultaDIAN()
      {
         var inputNIT = document.getElementById('vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit');
         if (inputNIT) {
            inputNIT.value = "79760202";
         } else {
            console.error('No se encontró el campo de entrada para el NIT');
            return;
         }    
      }
   ENDTEXT
return cCode
 
Image

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 4:46 pm
by leandro
Bueno parece ser, según lo que he entendido, es que el METHOD InjectJavascript( cScript ) CLASS TWebView2, no solo inyecta el código, si no que también lo ejecuta.

Con este código el navegador alcanza a mostrar el alert() con la información que le acabamos de pasar, pero inmediatamente le damos clic en aceptar en el alert del navegador, la aplicación sin mas ni mas se cierra y no deja rastro en el archivo error.log

Code: Select all | Expand

#include "FiveWin.ch"

static oWebView

consultaDIAN()

function consultaDIAN()

    local oWnd
    local cJavaScript := Javascript()

    DEFINE WINDOW oWnd TITLE "Usando DIAN desde un webview" SIZE 1050, 700
        oWebView = TWebView2():New( oWnd )
        oWebView:Navigate( "https://muisca.dian.gov.co/WebRutMuisca/DefConsultaEstadoRUT.faces" )
        oWebView:InjectJavascript( cJavaScript )
        
    ACTIVATE WINDOW oWnd CENTER ON RESIZE oWebView:SetSize( nWidth, nHeight )

    oWebView:End()

return nil

function Javascript()
    local cCode
    TEXT INTO cCode
        var inputNIT = document.getElementById('vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit');
        inputNIT.value = '79760202';
        alert(inputNIT.value);
    ENDTEXT
return cCode
 
Image

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 5:29 pm
by Antonio Linares
Leandro,

Aqui no se ejecuta el alert() hasta que no se descomenta la línea del oWebView:Eval( ... )

Luego InjectJavascript() NO ejecuta el código. A ver si estas enlazando una Clase TWebView2 modificada...

Code: Select all | Expand

#include "FiveWin.ch"

static oWebView

function Main()

   local oWnd

   DEFINE WINDOW oWnd TITLE "Usando DIAN desde un webview" SIZE 1050, 700
       oWebView = TWebView2():New( oWnd )
       oWebView:Navigate( "https://muisca.dian.gov.co/WebRutMuisca/DefConsultaEstadoRUT.faces" )
       oWebView:InjectJavascript( Javascript() )
       // oWebView:Eval( "consultaDIAN()" )
   ACTIVATE WINDOW oWnd CENTER ON RESIZE oWebView:SetSize( nWidth, nHeight )

   oWebView:End()

return nil

function Javascript()
   local cCode
   TEXT INTO cCode
      function consultaDIAN()
      {
         var inputNIT = document.getElementById('vistaConsultaEstadoRUT:formConsultaEstadoRUT:numNit');
         if (inputNIT) {
            inputNIT.value = "79760202";
         } else {
            console.error('No se encontró el campo de entrada para el NIT');
            return;
         }    
         alert( "aqui" );       
      }
   ENDTEXT
return cCode
 

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 7:21 pm
by leandro
Antonio gracias por responder, ni siquiera se como agregar una librería diferente :oops: estamos usando la versión que nos enviaste FWH64_2409.

Image

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 7:49 pm
by leandro
Reinstalamos la nueva versión de FW64_2409 y compilamos el ultimo código que nos enviaste dentro de la carpeta samples y efectivamente tiene el mismo comportamiento que mencionas, el código se ejecuta únicamente cuando se descomenta la línea oWebView:Eval( "consultaDIAN()" )
Image

Como hacemos para saber que libreria esta usando hbmk2, no sabemos si, el agregue algo que no se necesita.

Lo que si hemos notado es que muestra un warning al generar el ejecutable

Code: Select all | Expand

...
...
...
Lines 58, Functions/Procedures 2, pCodes 144
xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling '.\PRG\R64_fact.prg'...
Generating C source output to 'obj\R64_fact.c'...
Done.
Lines 39, Functions/Procedures 3, pCodes 186
bcc64.exe: warning: argument unused during compilation: '-Lc:\bcc770_64\LIB' [-Wunused-command-line-argument]
obj\R32_menu.c:
obj\R32_perm.c:
obj\Alyma.c:
obj\R32_bode.c:
obj\R32_cate.c:
obj\R32_ciud.c:
...
...
...
 
También revisamos las rutas de compilación del bat, buildx64.bat que esta en la carpeta samples y son las mismas que están en el archivo .hbp

buildx64.bat

Code: Select all | Expand

...
...
...

if "%FWDIR%" == "" set FWDIR=C:\fwh64_2409
if "%HBDIR%" == "" set HBDIR=C:\xHar2407_64
rem if "%2" == "/b" set GT=gtwin
rem if not "%2" == "/b" set GT=gtgui
set GT=gtgui
ECHO Compiling...

set hdir=%HBDIR%
set hdirl=%hdir%\lib
set fwh=%FWDIR%
set bcdir=C:\bcc770_64

...
...
...
 
xhb.hbp

Code: Select all | Expand

-optim-
-ldflag+=-aa -n- 
-Ic:\fwh64_2409\include
-Lc:\fwh64_2409\lib
 
xgo64.bat

Code: Select all | Expand

set bcc=bcc770_64
set path=c:\%bcc%\bin
set HB_USER_CFLAGS=-Ic:\%bcc%\INCLUDE\windows\crtl -Ic:\%bcc%\INCLUDE\windows\sdk -Lc:\%bcc%\LIB
set HB_USER_LDFLAGS=-Lc:\%bcc%\LIB;c:\%bcc%\LIB\psdk
c:\xHar2407_64\bin\hbmk2.exe xhbcmp.hbp -xhb -comp=bcc64
 
Cual será el error, de antemano gracias

Re: Capturar pagina html y recuperar resultado

Posted: Fri Oct 04, 2024 11:14 pm
by Antonio Linares
Estimado Leandro,

> Cual será el error

Que error ?

Re: Capturar pagina html y recuperar resultado

Posted: Sat Oct 05, 2024 3:10 pm
by leandro
Antonio gracias por responder

El que vengo reportando

:shock:

Code: Select all | Expand

Application
===========
   Path and name: C:\cmplar_64\hymlyma.exe (64 bits)
   Size: ********* bytes
   Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
   FiveWin  version: FWH 24.07
   C compiler version: LLVM/Clang C 5.0.2 (64-bit)
   Windows 8 64 Bits, version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 9 secs 
   Error occurred at: 05/10/2024, 10:08:03
   Error description: Error BASE/1070  Error de argumento: ==
   Args:
     [   1] = N   0
     [   2] = P   0x2345D41D818

Stack Calls
===========
   Called from: .\source\classes\twebview2.prg => (b)WEBVIEW2_ONEVAL( 128 )
   Called from:  => ASCAN( 0 )
   Called from: .\source\classes\twebview2.prg => WEBVIEW2_ONEVAL( 128 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\window.prg => TMDIFRAME:ACTIVATE( 1117 )
   Called from: .\PRG\R32_menu.prg => VTNAPRINCIPAL( 976 )
   Called from: .\PRG\R32_menu.prg => MAIN( 123 )

 
No se, si tenga que ver con alguna dll del webview que esta mal integrada.

Nosotros estamos usando el webview1 en varias partes de la app, tiene algo que ver eso?

Re: Capturar pagina html y recuperar resultado

Posted: Sat Oct 05, 2024 3:42 pm
by Antonio Linares
Lo estás usando en un entorno MDI, tal vez esté relacionado

Lo curioso es por que el handle del webview vale cero...