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
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
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