Page 3 of 5

Re: Capturar pagina html y recuperar resultado

Posted: Sat Oct 05, 2024 3:51 pm
by Antonio Linares
Así funciona bien. Pruébalo por favor:

Code: Select all | Expand

#include "FiveWin.ch"

static oWebView

function Main()

   local oWndMain, 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 oWndMain TITLE "Usando DIAN desde un webview" SIZE 1050, 700 MDI

   DEFINE WINDOW oWnd MDICHILD OF oWndMain

   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 oWndMain CENTER ;
      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

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 2:38 am
by Enrrique Vertiz
Saludos Antonio

Abusando de que estas viendo esto, en Peru tenemos la SUNAT y es en su web que debemos consultar los datos de las empresas, si existen, si estan activas y si es Ok recuperar sus datos, la web de consulta es esta:
https://e-consultaruc.sunat.gob.pe/cl-t ... edaWeb.jsp
ahi un valor valido es mi RUC: 20508287781
como hago para pasando ese valor obtener los demas, que son: Numero de RUC (Incluye la razon social en este caso), Estado del Contribuyente, Condicion del Contribuyente y domicilio fiscal.
Trate de entender el ejemplo de Colombia, pero no veo como aplicarlo a este caso.
Gracias

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 6:03 am
by Antonio Linares
Estimado Enrique,

Aqui lo tienes. La forma de obtener los valores de cResult es usando la IA. Se le da todo el HTML y le preguntas a la IA como obtener determinado valor usando javascript :-)

webviewruc.prg

Code: Select all | Expand

#include "FiveWin.ch"

static oWebView

function Main()

   local oWnd, cResult

   TEXT INTO cResult 
      [ document.querySelector('.list-group-item:nth-child(1) .col-sm-7 h4.list-group-item-heading').textContent,
        document.querySelector('.list-group-item:nth-child(2) .col-sm-7 p').textContent,
        document.querySelector('.list-group-item:nth-child(3) .col-sm-7 p').textContent.trim(),
        document.querySelector('.list-group-item:nth-child(4) .col-sm-3:nth-child(2) p').textContent,
        document.querySelector('.list-group-item:nth-child(4) .col-sm-3:nth-child(4) p').textContent,
        document.querySelector('.list-group-item:nth-child(5) .col-sm-7 p').textContent.trim(),
        document.querySelector('.list-group-item:nth-child(6) .col-sm-7 p').textContent.trim(),
        document.querySelector('.list-group-item:nth-child(7) .col-sm-7 p').textContent.trim(),
        document.querySelector('.list-group-item:nth-child(8) .col-sm-3 p').textContent.trim(),
        document.querySelector('.list-group-item:nth-child(8) .col-sm-3:nth-child(4) p').textContent.trim(),
        document.querySelector('.list-group-item:nth-child(9) .col-sm-7 p').textContent.trim() ]
   ENDTEXT     

   DEFINE WINDOW oWnd TITLE "Usando SUNAT desde un webview" SIZE 1050, 700

   oWebView = TWebView2():New( oWnd )
   oWebView:bOnNavigationCompleted = { | cUrl, hWebView | If( "jcr" $ cUrl, oWebView:Eval( cResult ),) }

   oWebView:Navigate( "https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/FrameCriterioBusquedaWeb.jsp" )
   oWebView:InjectJavascript( JavaScript() )
   // oWebView:OpenDevToolsWindow()
   oWebView:bOnEval = { | cJson, hWebView | If( cJson != "null" .and. cJson != "{}", ( MsgInfo( cJson ), oWnd:End() ),) }
   oWebView:Eval( "consultaRUC( '20508287781' )" )

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

   oWebView:End()

return nil

function Javascript()

   local cCode 

   TEXT INTO cCode 
      function consultaRUC( cRUC ) 
      {
         var ruc = document.getElementById( 'txtRuc' );
         var btnAceptar = document.getElementById( 'btnAceptar' );   
         ruc.value = cRUC;
         btnAceptar.click();   
      }
   ENDTEXT

return cCode

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 1:58 pm
by acrisostomo2017
Hola a todos,

Probando el codigo en tiempo de ejecución lanza este error

Time from start: 0 hours 0 mins 6 secs
Error occurred at: 06/10/2024, 08:56:14
Error description: Error BASE/1005 Message not found: TWEBVIEW2:_BONNAVIGATIONCOMPLETED
Args:
[ 1] = O TWEBVIEW2

Esoy usando FWH2407 y compilando con VISUAL STUDIO para 64 BITS

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 2:25 pm
by Enrrique Vertiz
Saludos Antonio

Funciona GRACIAS, cuando lo compilo solo (FWH 24.09 en 32Bits, BCC77 y xHb), esta todo Ok, pero cuando lo incluyo en mi sistema me sale el error abajo adjunto, alguna idea ??
Nota: debo mencionar que tube que comentar: METHOD SetWindowTheme( cSub, cIds ) INLINE _SetWindowTheme( ::hWnd, cSub, cIds ) porque me daba error al enlazar
Gracias

Application
===========
Path and name: D:\Gci\MySuite\MyContsys\MyContsys.EXE (32 bits)
Size: 3,689,984 bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212)
FiveWin version: FWH 24.07
C compiler version: Borland/Embarcadero C++ 7.4 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 36 secs
Error occurred at: 06/10/2024, 09:18:01
Error description: Error BASE/1070 Error de argumento: ==
Args:
[ 1] = N 0
[ 2] = P 0xA60DD0C

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: D:\Fwh\Fwh2407\source\classes\window.prg => TMDIFRAME:ACTIVATE( 1117 )
Called from: D:\Cv\contfive.prg => MAIN( 4353 )

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 3:38 pm
by cnavarro
El error de SetWindowTheme ocurre porque has de incluir la lib ( Borland ) uxtheme.lib en tu script de compilacion/linkado

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 6:45 pm
by Antonio Linares
acrisostomo2017 wrote:Hola a todos,

Probando el codigo en tiempo de ejecución lanza este error

Time from start: 0 hours 0 mins 6 secs
Error occurred at: 06/10/2024, 08:56:14
Error description: Error BASE/1005 Message not found: TWEBVIEW2:_BONNAVIGATIONCOMPLETED
Args:
[ 1] = O TWEBVIEW2

Esoy usando FWH2407 y compilando con VISUAL STUDIO para 64 BITS
Necesitas la versión de FWH 24.09

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 6:47 pm
by Antonio Linares
Enrrique Vertiz wrote:Saludos Antonio

Funciona GRACIAS, cuando lo compilo solo (FWH 24.09 en 32Bits, BCC77 y xHb), esta todo Ok, pero cuando lo incluyo en mi sistema me sale el error abajo adjunto, alguna idea ??
Nota: debo mencionar que tube que comentar: METHOD SetWindowTheme( cSub, cIds ) INLINE _SetWindowTheme( ::hWnd, cSub, cIds ) porque me daba error al enlazar
Gracias

Application
===========
Path and name: D:\Gci\MySuite\MyContsys\MyContsys.EXE (32 bits)
Size: 3,689,984 bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212)
FiveWin version: FWH 24.07
C compiler version: Borland/Embarcadero C++ 7.4 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 36 secs
Error occurred at: 06/10/2024, 09:18:01
Error description: Error BASE/1070 Error de argumento: ==
Args:
[ 1] = N 0
[ 2] = P 0xA60DD0C

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: D:\Fwh\Fwh2407\source\classes\window.prg => TMDIFRAME:ACTIVATE( 1117 )
Called from: D:\Cv\contfive.prg => MAIN( 4353 )
Estas usando ventanas MDI en tu aplicación ?

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 6:48 pm
by leandro
Enrrique Vertiz wrote:Saludos Antonio

Funciona GRACIAS, cuando lo compilo solo (FWH 24.09 en 32Bits, BCC77 y xHb), esta todo Ok, pero cuando lo incluyo en mi sistema me sale el error abajo adjunto, alguna idea ??
Nota: debo mencionar que tube que comentar: METHOD SetWindowTheme( cSub, cIds ) INLINE _SetWindowTheme( ::hWnd, cSub, cIds ) porque me daba error al enlazar
Gracias

Application
===========
Path and name: D:\Gci\MySuite\MyContsys\MyContsys.EXE (32 bits)
Size: 3,689,984 bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212)
FiveWin version: FWH 24.07
C compiler version: Borland/Embarcadero C++ 7.4 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 36 secs
Error occurred at: 06/10/2024, 09:18:01
Error description: Error BASE/1070 Error de argumento: ==
Args:
[ 1] = N 0
[ 2] = P 0xA60DD0C

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: D:\Fwh\Fwh2407\source\classes\window.prg => TMDIFRAME:ACTIVATE( 1117 )
Called from: D:\Cv\contfive.prg => MAIN( 4353 )
Este es el mismo error que nosotros tenemos, también en el momento en que agregamos la función a la aplicación, por aparte funciona de manera correcta.

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 6:49 pm
by leandro
Antonio Linares wrote:Lo estás usando en un entorno MDI, tal vez esté relacionado

Lo curioso es por que el handle del webview vale cero...
Si correcto, usamos ambiente MDI

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 6:53 pm
by leandro
Antonio Linares wrote:Así funciona bien. Pruébalo por favor:

Code: Select all | Expand

#include "FiveWin.ch"

static oWebView

function Main()

   local oWndMain, 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 oWndMain TITLE "Usando DIAN desde un webview" SIZE 1050, 700 MDI

   DEFINE WINDOW oWnd MDICHILD OF oWndMain

   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 oWndMain CENTER ;
      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
Nada mismo error

Image

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 7:05 pm
by Antonio Linares
Leandro,

Estás usando la 24.09 ?

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 7:08 pm
by Antonio Linares
Leandro,

Por favor prueba este EXE:
https://github.com/FiveTechSoft/FWH_too ... ewdian.exe

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 7:29 pm
by leandro
Antonio Linares wrote:Leandro,

Estás usando la 24.09 ?
Si correcto fw2409 64 bits

Re: Capturar pagina html y recuperar resultado

Posted: Sun Oct 06, 2024 7:31 pm
by Enrrique Vertiz
cnavarro wrote:El error de SetWindowTheme ocurre porque has de incluir la lib ( Borland ) uxtheme.lib en tu script de compilacion/linkado
Gracias !!! colocando la LIB indicada desaparecio el mensaje de error