Página 1 de 1

Como descargo un fichero de internet

Publicado: 26 Oct 2011, 06:27
por luis
La pregunta es simple entro a una pagina recojo los links con _IELinkGetCollection,verifico que haya alguno con la descripsion que necesito si lo hay lo descargo pero cual es la funcion para descargar un fichero una vez que tienes el link o esta funcion no sirve para esto?

Re: Como descargo un fichero de internet

Publicado: 26 Oct 2011, 08:22
por Ximorro
En la versión de AutoIT que uso yo se hace con InetGet($url, $archivo), ¡facil!. Creo que en la última ha cambiado algo pero me parece que la función se llama igual, búscala en la ayuda para ver los detalles.

Como descargo un fichero de internet

Publicado: 26 Oct 2011, 08:30
por luis
Gracias pero la funcion no le entiendo ya lo he intentado pero nada,no se si podras hecharme la mano,se supone que creas una forma con una Ie embebidad
para no tener problemas yo me logeo cuando llego al lugar que necesito bajar archivos le doy al boton empezar,obtiene todos los links pero no baja ninguno
te dejo abajo el codigo aber si me puedes ayudar,los archivos son pdf y xml.gracias

Código: Seleccionar todo

#include <GUIConstants.au3>
#include <IE.au3>

Global $URL="C:\Users\luis\Desktop\facturas\Agosto1"
$GUI = GUICreate("buscador", 800, 450)
Global $object = ObjCreate("Shell.Explorer.2")
$object_ctrl = GUICtrlCreateObj($object, 16, 10, 780, 400)
$url_button = GUICtrlCreateButton("Guarda en", 166, 410, 400, 25, 0)

$Empezar = GUICtrlCreateButton("Empezar", 16, 410, 50, 25, 0) ; Creats Back GUI
$progressbar1 = GUICtrlCreateProgress ( 570, 415, 200, 20, 0) ; Creates Progress bar

GUISetState()
_IENavigate($object, "https://www.mysuitecfdi.com/login.aspx")
$oForm = _IEFormGetObjByName ($object, "suggest_link")
$oText = _IEFormElementGetObjByName ($oForm, "title")
_IEFormElementSetValue ($oText, "Nombre")
$oText2 = _IEFormElementGetObjByName ($oForm, "url")
_IEFormElementSetValue ($oText2, "Dirección")

While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $url_button
        $URL = Inputbox("Direccion", "Escribe la ruta")
        
    Case $msg = $back_button 
   $olinks = _IELinkGetCollection($object)
   For $olink In $olinks 
      If $olink.innerText=="PDF" Then      
          inetget($olink, $URL,1,1)
		EndIf  
	  If $olink.innerText=="XML" Then
		  inetget($olink, $URL,1,1)
        EndIf 
  Next   
    Case $msg = $GUI_EVENT_CLOSE
        Exit
    EndSelect
WEnd

Re: Como descargo un fichero de internet

Publicado: 26 Oct 2011, 08:42
por Ximorro
¿Pero qué valen $olink y $URL? (prueba a hacer un consolewrite o un msgbox a ver qué te dan)
Tienen que ser cadenas, en $olink tiene que estar la URL del archivo a descargar y en $URL el path del archivo EN TU DISCO, o sea, dónde lo vas a guardar.

Por ejemplo:
InetGet("http://www.emesn.com/autoitforum/styles ... _logo2.png", "c:\logo_autoit.png")
descarga el logo de esta web en la unidad C:
prueba esa línea a ver si te funciona, si esto va el problema está en las variables que le estás pasando.

Como descargo un fichero de internet

Publicado: 26 Oct 2011, 08:50
por luis
ok olink es la coleccion de links nada mas que no recuerdo si se pone a asi o olink.href o algo asi y url es la ruta donde quiero que se guarden.la linea de codigo que me distes funciona,deja verificar,por cierto cual es la forma correcta de utilizar el msgbox ya que me marca error

Re: Como descargo un fichero de internet

Publicado: 26 Oct 2011, 09:05
por Ximorro
Entonces de $olink tendrás que sacar la url concreta. No conozco las funciones _IE pero no creo que sea complicado.
Además no tengo muy claro que en el segundo parámetro baste poner la carpeta, creo que hay que poner el path completo con nombre de archivo.

¿Cómo has puesto el MsgBox?
Tiene muchas posibilidades pero el uso básico es:
MsgBox(0, "Título", "Texto")

Como descargo un fichero de internet

Publicado: 26 Oct 2011, 14:48
por luis
Gracias por tu ayuda,ya funciona , pero creo que es mas complicado de lo que parece ya que checando el link,veo que tiene javascript una funcion que se llama postback la cual no puedo hacer que funcione,si alguien tuviera la respuesta se los agradeceria

Re: Como descargo un fichero de internet

Publicado: 26 Oct 2011, 17:39
por Chefito
luis escribió:Gracias por tu ayuda,ya funciona , pero creo que es mas complicado de lo que parece ya que checando el link,veo que tiene javascript una funcion que se llama postback la cual no puedo hacer que funcione,si alguien tuviera la respuesta se los agradeceria
Con esos pocos datos no se te puede ayudar mucho. Y más cuando no podemos acceder a la página con el código html para poder probar cosas, ya que tienes que estar registrado.
Hay varios ejemplos que como hacer funcionar una función javascript. Yo he puesto varios post. Poniendo en la búsqueda del foro (arriba a la derecha) la palabra javascript, y por ejemplo mirando mis post, te salen varios con la solución. El primero con la solución sería este: http://www.emesn.com/autoitforum/viewto ... ipt#p11840.

Saludos.

Como descargo un fichero de internet

Publicado: 26 Oct 2011, 18:29
por luis
Gracias lamentablemente no puedo darte la pagina ya que los archivos los descargo de un servidor y como sabras sus contraseñas son privadas,por cierto sabes que es lo que hace exactamente el codigo que puse antes de javascript,como hago para _IELinkClickByText al clickear no habra en otra pagina si no en la misma

Re: Como descargo un fichero de internet

Publicado: 26 Oct 2011, 20:07
por Chefito
luis escribió:por cierto sabes que es lo que hace exactamente el codigo que puse antes de javascript
No lo se. No se si es una función creada por el usuario o definida en el propio lenguaje. Nunca la he visto. Te recomiendo que busques en google :smt024 .
luis escribió:como hago para _IELinkClickByText al clickear no habra en otra pagina si no en la misma
Puede que lo más facil sea coger su dirección url y cargarla en el propio navegador.
Un pequeño ejemplo:

Código: Seleccionar todo

#include <IE.au3>
$oIE = _IECreate ("http://www.emesn.com/foro.php")
$oLinks = _IELinkGetCollection ($oIE)
For $oLink In $oLinks
    If $oLink.innertext=="Por voz terra" Then
		ExitLoop
	EndIf
Next
_IENavigate($oIE, $oLink.href)
Otra forma puede que sea cambiando su propiedad target="_seft". Mira por ejemplo esta web donde explican sus valores: http://www.aulaclic.es/html/t_7_3.htm

Código: Seleccionar todo

#include <IE.au3>
$oIE = _IECreate ("http://www.emesn.com/foro.php")
$oLinks = _IELinkGetCollection ($oIE)
For $oLink In $oLinks
    If $oLink.innertext=="Por voz terra" Then
		ExitLoop
	EndIf
Next
$oLink.target="_self"
$oLink.click
Hay otras formas un poco más complicadas.

Saludos.

Como descargo un fichero de internet

Publicado: 26 Oct 2011, 22:57
por luis
Gracias utilize $oLink.target="_self",$oLink.click,pero te manda la pagina para descargar como ases para capturarla o mejor como lo descargas,con InetGet vamos declaras una funcion que obtenga la pagina y la pasas al comando inetget o eso no se puede?,mejor aun como le hago para saber que pagina me esta cargando

Re: Como descargo un fichero de internet

Publicado: 26 Oct 2011, 23:40
por Chefito
Primeramente decirte que te expresas fatal :smt012 . A veces me cuesta entender lo que quieres decir. Explícate mejor, esplayate escribiendo, pon ejemplos de lo que quieres, códigos, y por favor, utiliza los signos de puntuación (comas y demás). Que esto no es un sms de un movil :smt005 .

Supongo que si un link tiene en su propiedad href la dirección de descarga del archivo, simplemente tienes que capturar ésta para luego utilizarla con la función inetget. Simpelemente eso. No hay más.
Si no es así, compañero......explícate mejor que no somos adivinos. Di donde está ese link de descarga, como se crea, pon algo de código html-javascript, etc. Mi bola de cristal está estropeada en estos momentos. No puedo adivinar las cosas :smt005 .

Saludos.

Como descargo un fichero de internet

Publicado: 26 Oct 2011, 23:55
por luis
:smt042 lo siento ando un tanto desvelado por este programa,te explico entro a un servidor donde tienes unos 100 archivos que se necesitan descargar,pero los links estan programados con javascript tienen una url como esta: javascript:__doPostBack('ctl00$ContentPlaceHolder1$GVDocumentos$ctl02$lnkPDF',''),el punto es que esta no es la url real ya que no me descarga nada,entonces se me ocurrio mandar un click al link para que me de la url real y asi poder descargarlo con inneget,se le da un click y me direcciona a la url real pero no se como capturar esta url para pasarselo inneget,o esto es cierto o tengo que estudiar mas html.Gracias y una disculpa

Re: Como descargo un fichero de internet

Publicado: 27 Oct 2011, 00:30
por Chefito
Pues no se chico. Eso parece muy dificil de resolver si no podemos hacer pruebas. Si miras esa función en google te salen bastantes resultados: http://www.google.es/#hl=es&sugexp=kjrm ... 66&bih=646
Puede ser que sea cuestión de investigar que hace y como lo hace para poder trabajar con ella.
Exactamente que es lo que hace cuando le das al link? Te sale directamente la ventana de descargar el archivo?(supongo que sea esto). O te redirecciona a otra página con le link?.
Que ocurre si pones esto cuando estés en la página?

Código: Seleccionar todo

_ienavigate($object, "javascript:__doPostBack('ctl00$ContentPlaceHolder1$GVDocumentos$ctl02$lnkPDF','')")
Esto ctl00$ContentPlaceHolder1$GVDocumentos$ctl02$lnkPDF parecen datos que le pasas al servidor para que trabaje con ellos y te devuelva algo. Seguramente están separador por el símbolo $. ctl debe ser control, ContentPlaceHolder significa más o menos Contenido del marcado de posición?, lnkPDF debe ser el link del pdf, y GVDocumentos podría ser un path?? Todo esto son conjeturas. Habría que saber que hace el servidor con estos datos.

No estará definida la función __doPostBack en la página web no? Eso sería de mucha ayuda. Aunque por lo que he podido ver, seguramente no.

Saludos.

Como descargo un fichero de internet

Publicado: 27 Oct 2011, 00:36
por luis
cuando se le da el click automaticamente te da el fichero para que lo descargues (te aparece la ventana de windows de quieres guardarlo o cancelar),pero en errores que he tenido te manda a una pagina y arriba te aparece la url completa de donde esta el archivo esa es la razon por la que quiero capturar esa pagina porque asi puedo mandarselo a inneget.en teoria parese sencillo pero creo que es mas dificil de lo que pense :smt022

Re: Como descargo un fichero de internet

Publicado: 27 Oct 2011, 08:37
por Ximorro
Viendo la url final a mano ¿no puedes montarla completa con los nombres de archivo?
Quiero decir, si por ejemplo ves que un archivo está en "http://www.cosa.com/documentos/documento.pdf"
Y están siempre en esa carpeta, desde la página donde descargas podrás extraer los nombres de archivo, sería ir cambiando en esa url el nombre de archivo pero manteniendo el path. Eso sí se lo podrías pasar a InetGet.
A InetGet hay que pasarle una url, no puedes pasarle javascript.

Chefito, o quien sepa, ¿se puede preguntar a la página web por el valor de variables javascript que está manejando. Sospecho que sabiendo el valor de
ctl00
ContentPlaceHolder1
GVDocumentos
ctl02
lnkPDF
se puede montar la url, ¿No será que "$" es concatenador de cadenas y simplemente está montando la url con esas partes?

luis, mira a ver si el código javascript está en la propia página html, busca esa función a ver cómo es. Puede que no esté directamente, sino en un "include" tipo:
<script type="text/javascript" src="http://www.laweb.com/rutinas/utilidades.js"></script>
En ese caso también se puede descargar utilidades.js o como se llame y mirar la función.

Re: Como descargo un fichero de internet

Publicado: 27 Oct 2011, 09:57
por arkcrew
Y porque no pruebas a obtener el link al que hace click, analizarlo (en caso de que no sea un enlace al archivo) y sacar de ese archivo el link de descarga, si como bien dice Ximorro es un archivo .js, puedes analizarlo y ver como genera el enlace y así puedes añadirlo en un integet y poder descargarte el archivo...

Espero haberme explicado.
Saludos!

Como descargo un fichero de internet

Publicado: 28 Oct 2011, 06:40
por luis
Gracias al momento de darle click con autoit me muestra una pagina fuera de la gui y me genera un error y se sale del programa ,lo ultimo que pense es abrir pagina de internet,mandar un click y esperar la ventana de descarga de IE y que presione el boton de guardar, pero por alguna razon no envia el click,ya me canse creo que javascript gano :smt022 ,Gracias a todos.

Re: Como descargo un fichero de internet

Publicado: 28 Oct 2011, 10:17
por Chefito
luis escribió:Gracias al momento de darle click con autoit me muestra una pagina fuera de la gui y me genera un error y se sale del programa ,lo ultimo que pense es abrir pagina de internet,mandar un click y esperar la ventana de descarga de IE y que presione el boton de guardar, pero por alguna razon no envia el click,ya me canse creo que javascript gano ,Gracias a todos.
Es que más no se puede hacer hacer sin poder acceder a la página. Si tuvieramos acceso podríamos probar códigos a ver si dabamos con la solución. Pero así no :smt021 .
Ximorro escribió:Chefito, o quien sepa, ¿se puede preguntar a la página web por el valor de variables javascript que está manejando. Sospecho que sabiendo el valor de
ctl00
ContentPlaceHolder1
GVDocumentos
ctl02
lnkPDF
se puede montar la url, ¿No será que "$" es concatenador de cadenas y simplemente está montando la url con esas partes?
Sí que se puede. No directamente (por lo menos yo no he podido), pero si insertando código dhtml en la página, por ejemplo un objeto con un campo oculto para meter el valor de la variable y luego recuperarlo con las funciones _IE.... . Eso ya lo he hecho en algunos post por aquí. Solo hay que buscar en el foro :smt002 .
Pero aunque se pueda recuperar, en este caso, parece que le envía al servidor una cadena de texto, no unas variables con valores asignados. Seguramente, el servidor separará esta cadena, mirará los valores que genera estos datos que dices (en el servidor sí puede que se comporten como variables), y retornarán al cliente estos valores. Todo esto es teórico. Habría que ver el código.

Saludos.