Rellenar un formulario Web desde foxpro y recorrer tabla HTML

765 views
Skip to first unread message

TurbiSoft

unread,
Nov 7, 2012, 4:32:57 PM11/7/12
to publice...@googlegroups.com
Saludos colegas:
 
Estoy rellenando informacion de login en una web, luego hago click en link y paso ana pagina donde digito un rango de fecha y esta me despleiga una tabla de varias columnas,
con nombre de archivos para descargar, hasta ese punto voy bien.
 
El problema es que no puedo hacer referencia a esa tabla por codigo, para hacer un una especie de "SCAN / EndScan" e ir descargando los archivos.
 
Los script de la pagina lo maneja javascript. He utilizado tanto el control ActiveX browser como el objeto COM InternetExplorer.application, pero no he podido avanzar o hacer el bucle recorreindo la tabla html.
 
Cuando el usuario hace click en la celda del nombre del archivo, llama el motodo download pasando como parametro el IDCliente y el nombre del archivo contenido en esa celda.
 
Espero cualquier ayuda. copio el codigo para referencia:
 
Atte,
Luis Alberto Turbi Republica Dominicana
 
 
Private nForma
nForma = 0
Release oExplorer
If Type("oExplorer") # 'O'
 Public oExplorer As InternetExplorer.Application
 oExplorer=Createobject("InternetExplorer.Application")
 oExplorer.navigate2("https://Mipagina.com/")
 ObjTexto ='Cargando.'
 Do While oExplorer.busy
  Wait Window ObjTexto Time(0.1)
  ObjTexto= ObjTexto+'.'
 Enddo
Endif
Set Step On
cDia = Padl(Alltrim(Str(Day(Date()))),2,"0")
cMes = Padl(Alltrim(Str(Month(Date()))),2,"0")
cAno = Alltrim(Str(Year(Date())))
cFecha = cMes+"/"+cDia+"/"+cAno
oExplorer.Visible =.T.
*oExplorer.Path = fullpath(CURDIR())
oExplorer.FullScreen
oExplorer.Document.Forms(nForma).Userid.Value="USUARIO"
oExplorer.Document.Forms(nForma).Password.Value="PassWord"
oExplorer.Document.Forms(nForma).ClientID.Value="IDCliente"
oExplorer.Document.Forms(nForma).submit()
Enviando_Wait()
oExplorer.Document.Forms(nForma).action = "ActiveFilesQuery.jsp"
oExplorer.Document.Forms(nForma).submit()
Enviando_Wait()
oExplorer.Document.Forms(nForma).FromDate.Value = cFecha
oExplorer.Document.Forms(nForma).ToDate.Value = cFecha
* oExplorer.document.forms(nForma).Location.value = "c:\work"
oExplorer.Document.Forms(nForma).submit()
Enviando_Wait()
*!* Store "" To cColeccion
*!* For Each loLink In oExplorer.Document.Tables
*!*  cColeccion = cColeccion + loLink.Table
*!* Endfo
oExplorer.Document.Forms(nForma).DwldClientID.Value = 'ClienteID'
oExplorer.Document.Forms(nForma).DwldFileName.Value = 'Archivo.txt'
*oExplorer.Document.Forms(nForma).Download('ClienteID','ArchivoTXT')
oExplorer.Document.Forms(nForma).action = "/tally/DownloadFile.do"
oExplorer.Document.Forms(nForma).submit()
Set Step On
* =Salir()

***********************
Procedure Enviando_Wait
***********************
texto ='Enviando.'
Do While oExplorer.busy
 Wait Window texto Time(0.1)
 texto= texto + '.'
Enddo
Endproc

********************
Procedure salir
******************
oExplorer.Document.Forms(nForma).action = "/tally/Logout.do"
oExplorer.Document.Forms(nForma).submit()
Enviando_Wait()
Release oExplorer
Return
 
 
 
 

Miguel

unread,
Nov 8, 2012, 1:23:33 PM11/8/12
to publice...@googlegroups.com

Hola,

 

No sé si he entendido bien la cuestión. Según parece tienes un formulario de acceso, que te devuelve una tabla en la que hay una columna que son links a resultados que son los que te interesa obtener y lo que pretendes es hacer un scan a esta tabla (web).

 

Si cuando haces clic en uno de esos enlaces te aparece una página con datos concretos del acceso, por ejemplo: http://www.xxx.com/noticia.asp?IdMensaje=128, programar el acceso directo a esa página de resultados es muy fácil, seguramente ya estás habituado a hacerlo.

 

Si no es así, o sea que en la línea de direcciones del navegador te aparece siempre una genérica, lo que deberías hacer el filtrar el resultado para únicamente te devuelva uno en cada acceso. A partir de ahí te sería relativamente fácil programar hacer click sobre ese enlace y obtener los resultados del mismo.

Espero haberte sido de alguna ayuda.

Saludos,

Miguel

Marco Plaza

unread,
Nov 8, 2012, 6:46:27 PM11/8/12
to publice...@googlegroups.com

Hace un tiempo publiqué un codigo para leer todas las tablas de una URL.

Chequealo aqui:

http://social.msdn.microsoft.com/Forums/en-US/visualfoxprogeneral/thread/6fc78693-a327-459f-a3ba-040ffef2da7d

Saludos

TurbiSoft

unread,
Nov 9, 2012, 12:09:16 PM11/9/12
to publice...@googlegroups.com
Gracias por sus respuestas y tiempo, voy a chequear los links.
 
En verdad, despues de hacer login en la pagina, genero un "reporte"  o tabla html, con unos nombres de archivos que tengo que descargar.
 
Cuando selecciono uno de estos archivos en la columna de nombre del archivo, el navegador despleiga el cuadro de dialogo guardar, me  pregunta donde guardar el archivo en disco, esta es la parte que me falta automatizar.
 
Gracias.
 

Miguel

unread,
Nov 9, 2012, 12:11:14 PM11/9/12
to publice...@googlegroups.com
Lo has intentado con URLMON?

TurbiSoft

unread,
Nov 9, 2012, 3:30:52 PM11/9/12
to publice...@googlegroups.com
Marcos, el link parece estar roto, es lamentable.!! 

TurbiSoft

unread,
Nov 9, 2012, 3:35:28 PM11/9/12
to publice...@googlegroups.com
Marcos, disculpa mi ignornacia, perono conozco ese liberia y su uso, voy a bucar informacion al respecto.
 
Mientras tanto, podrias darme una introduccion?
 
Gracias.
Message has been deleted

TurbiSoft

unread,
Nov 12, 2012, 9:08:51 AM11/12/12
to publice...@googlegroups.com
 
Saludos amigos, como buen programador foxpro, utilice artificios y resolvi el "bucle por la tabla", jejeje
 
Ahora el problema es evitar que IE me despleigue el cuadro de dialogo o ventana popupr "guardar archivo", debe ser guardado en disco de forma automatica.
 
He congiurado IE en el Menu Herrameintas, opciones, y de todas formas me sale la ventana.
 
Alguna sugerencia?
 
Le anexo el segmento de codigo para ilustrar
 
Set Step On
Strtofile(oExplorer.Document.Body.InnerHTML,"InnerHTML.htm")
Set Step On
Store "" To cArchivo
lcXML=Filetostr("InnerHTML.htm")
** Cantidad de archivos a descargar
nRepite = Occurs("javascript:Download('cID',",lcXML)

For i= 1 To nRepite
 cArchivo = Substr(lcXML,At("javascript:Download('cID',",lcXML)+30,8)
 oExplorer.Document.Forms(nForma).DwldClientID.Value = 'cID'
 oExplorer.Document.Forms(nForma).DwldFileName.Value = cArchivo  && 'A3101724'
 oExplorer.Document.Forms(nForma).action = "/tally/DownloadFile.do"
 oExplorer.Document.Forms(nForma).submit()
* elimino la cadena con el nonmbre del archivo anterior
 cElimina = "javascript:Download('cID', '"+cArchivo+"'"
 lcXML= Strtran(lcXML,cElimina)
Endfor
 
Reply all
Reply to author
Forward
0 new messages