Capturar pagina html y recuperar resultado

User avatar
Antonio Linares
Site Admin
Posts: 42250
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Enrrique Vertiz
Posts: 549
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 24.09, BCC74, MySQL 8.0.X, SQLLIB 1.9m
User avatar
Antonio Linares
Site Admin
Posts: 42250
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
acrisostomo2017
Posts: 7
Joined: Fri Dec 08, 2017 8:46 pm
Location: Lima Perú

Re: Capturar pagina html y recuperar resultado

Post 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
Saludos
Jorge Antonio Crisóstomo
Lima Perú
Teléfono: +51 988460143
Enrrique Vertiz
Posts: 549
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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 )
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 24.09, BCC74, MySQL 8.0.X, SQLLIB 1.9m
User avatar
cnavarro
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Capturar pagina html y recuperar resultado

Post by cnavarro »

El error de SetWindowTheme ocurre porque has de incluir la lib ( Borland ) uxtheme.lib en tu script de compilacion/linkado
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
Antonio Linares
Site Admin
Posts: 42250
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42250
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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 ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
leandro
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
Antonio Linares
Site Admin
Posts: 42250
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Capturar pagina html y recuperar resultado

Post by Antonio Linares »

Leandro,

Estás usando la 24.09 ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42250
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Capturar pagina html y recuperar resultado

Post by Antonio Linares »

Leandro,

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

Antonio Linares
www.fivetechsoft.com
User avatar
leandro
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Capturar pagina html y recuperar resultado

Post by leandro »

Antonio Linares wrote:Leandro,

Estás usando la 24.09 ?
Si correcto fw2409 64 bits
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
Enrrique Vertiz
Posts: 549
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru
Contact:

Re: Capturar pagina html y recuperar resultado

Post 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
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 24.09, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Post Reply