Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #41  
Antiguo 10-10-2016
fqm33 fqm33 is offline
Miembro
NULL
 
Registrado: ago 2016
Posts: 18
Poder: 0
fqm33 Va por buen camino
Compañeros buenas noches; estoy en el mismo problema que les plantea de entrar el dato del apellido y lo he podido solucionar a medias, con el siguiente código
Código Delphi [-]
 WebBrowser1.OleObject.Document.GetElementByID('ctl00$ph$ucFields$tbLastName').Value := Edit3.Text;
, sin embargo sucede algo muy curioso (al menos para mi), si le pongo un
Showmessage, antes de la orden funciona pero si lo quito me sigue sacando error de violación de memoria, alguien me podría ayudar con esto, pues le he dado muchas vueltas y nada que le encuentro la solución, he pensado en automatizar el click sobre el boton del ShowMessage pero no se si se pueda hacer, he buscado pero no he encontrado información al respecto. de nuevo muchas gracias.
Responder Con Cita
  #42  
Antiguo 15-10-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
He tratado de darme el tiempo para prepararte una especie de tutorial guiado de como proceder a realizar el proceso de ingeniería inversa. Pero tengo un par de trabajos que requieren de prioridad.
No estoy seguro de si es efectivamente los ids y names que tu mencionas pero es probable que si. Si es así, ya tienes la mitad hecho.

En pocas líneas el proceso de ingeniería inversa es examinar tanto el HTML e interpretarlo como examinar los parámetros que se esperan en cada página. Del HTML se trata de buscar aquellos elementos/datos que sirven tanto para mostrar al usuario, guardar en una base de datos, como así también los que serán de utilidad para saber que data y/o parámetros pasar a las páginas web para repetir o continuar con el trabajo.

Cuando se llega a la página final en tu caso (ya que debes interactuar con una serie de páginas, en cierto orden) lo que debes hacer es ir leyendo el HTML y extraer de éste lo que necesitas para pasar a tu archivo de excel. Estudia ese HTML, y si observas con atención muy posiblemente notes un patrón. Por ejemplo, digamos que el monto total de una factura se muestra en un tag p (tag de párrafo) que está en la línea 25, o que el detalle de la factura empieza en la línea 27 y el fin del detalle se detecta cuando se llega a una línea que tiene el tag de fin de tabla.
Teniendo eso como base simplemente lo que necesitas es pasar el HTML a un TStrings y proceder a leer las líneas y dentro de ésta en la "columna" adecuada. Para ello puedes ayudarte de funciones como Pos(), Copy() y demás funciones de tratamiento de strings. Es decir "leer" de cada líneas del HTML de interés el texto que necesitas y ahí ya pasarlo al excel.

Todo ese estudio previo es la ingeniería inversa. Y como he dicho y hasta incluso he comentado en otro hilo se puede evitar lidiar mucho si pasas a cada URL los parámetros adecuados. Si el proceso es tal que de pagina1 vas a pagina2 y así hasta paginaN. Debes hacer esto por cada pagina. La cosa se hace más sencilla si resulta ser que los elementos a buscar son siempre lo mismos y en la misma cantidad. Por ejemplo: digamos que pagina2 requiere como parámetro el tipo de DNI y el número. Es muy poco probable que la lista o combo para seleccionar el tipo de DNI se genere de forma dinámica (es decir, cada vez que se visita la página y desde el lado del server) y que cambie en cada visita. Lo de esperar es que esta lista sea fija. Entonces a esta página no necesitas hacerle reingeniería en cada ejecución. Si ya sabes que pasarle directamente se lo pasas al parámetro y ya está.
Distinto es cuando el contenido HTML de interés es totalmente dinámico y cambiante. Por ejemplo: la cantidad de items o artículos vendido de una factura. Para estos tipos de páginas vas a tener que leer cada vez el HTML y posicionarte en el lugar adecuado... Lo duro acá es estudiar el HTML para descubrir el "patrón". Cuando lo descifras, ya es cosa de implementar un algoritmo que sepa detectar la cantidad de items, etc.
Por ejemplo digamos que cuando la factura tiene un único item el HTML tiene 46 líneas. Entonces, si al leer el HTML generado observo que Count dice 79 es porque hay 33 items. Ya se la cantidad, y hasta incluso desde que línea a línea.

Es un trabajo tedioso hacer ese estudio, pero te garantiza de que vas a grano. Lees solamente lo que necesitas. No hay que estar interactuando con la página, nada de GetElementByID() o cosas así que demoran su tiempo. Estudia el "patrón" a cada página. Visitas la página, guardas el HTML de forma temporal y te vas a cada lugar clave.

Aquí hago una buena advertencia: el contenido HTML leído depende fuertemente del componente utilizado. Navegadores como FireFox y Chrome van a tratar de generarte el HTML completo y cumpliendo lo mejor posible el estándar. Distinto es si usas el componente Indy por ejemplo: éste recibe el HTML crudo, el que será producido por el server... y con las posibles pifias que pudiera haber cometido el desarrollor web al momento de programar el script.
Por tanto el HTML que leas y veas en un navegador no necesariamente va a ser el mismo del que puedas extraer desde el componente.

Sobre los parámetros que se necesiten en cada página ya he comentado: utiliza las herramientas que ofrecen Chrome o FireFox. Por ejemplo en FF: vas al Menú Desarrollador -> Red. En el Monitor de Red ve a la pestaña de Métodos y busca un GET sobre la URL con los parámetros. Seleccionalo. Ahora al costado derecho tienes la información exacta de la URL decodificada, los parámetros y sus valores.
Por ejemplo, visita el foros Varios de ClubDelphi. Si "auditas" la página notarás que detectará un único parámetro con el nombre f y el valor es 11. De esta forma podemos irnos a visitar cualquier foro de CD, si conocemos el "id" de cada uno simplemente con ir a la URL: http://clubdelphi.com/foros/forumdisplay.php?f=<ID>

¿De donde podemos sacar esos ID? Que te parece si examinamos la página principal: http://clubdelphi.com/foros/index.php. Dando una explorada al HTML encuentro que cada foro está listado así:


<div> <a href="forumdisplay.php?f=el id"><strong>Nombre del Foro</strong></a> <span class="smallfont">(42 Viendo)</span> </div>
Entonces, como se que es poco probable que estén poniendo y sacando foros, la cantidad es conocida. Es un trabajo de una única vez. Por caso, viendo el HTML puedo decir que Varios está en la línea 691.
SI quiero ir más lejos, y quiero hacer un sistema que me diga los últimos hilos de cada foro y el usuario que ha comentado también puedo hacerlo. Ahora el planteo es dinámico, el truco está en localizar el inicio y fin del tag tr que define la fila. En cada fila tengo separado en tag td el foro, el url e id del hilo, el usario, etc.

Espero que se entienda.
Si no sabes aunque sea lo mínimo de HTML, haz una pausa y aprendelo. Luego vuelve y empieza de nuevo con el sistema.
Más no puedo decir... sino ya es hacerte el trabajo. ¡Ya te he comentado todas las pistas y detalles! Y la verdad para serte franco, si no puedes lidiar con todo lo que dije, es que con todo respeto: no estás a la altura del trabajo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #43  
Antiguo 16-10-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Y para que veas que soy considerado, como he dicho antes: ya había explicado en una oportunidad el tema. Pero por lo visto ni te molestaste en buscar en el foro.

Combinando los conceptos: Navegar la URL codificada con los parámetros que necesita y luego procesar el HTML el trabajo se puede hacer lo que buscas.

El material está, el trabajo fuerte es sentarse y ponerse a estudiar el HTML de cada página involucrada, que parámetros necesita en cada caso. Para cuando entiendas el funcionamiento y operatoria del sitio podrás implementar tu propuesta.

Lo último (volcar la data a excel) ya queda peor tu cuenta.

Ya no tienes excusa. Todo se ha dicho, incluso hay hilos sobre como abrir un archivo de excel desde Delphi. Asi que el material está. No te sigas complicando con eso de lidiar con GetElementByID.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Enviar información a aplicación Delphi desde PHP elpichi Internet 3 10-05-2015 20:06:42
Enviar Datos a pagina web desde delphi tocomi Internet 3 19-02-2009 00:02:59
Problemas para enviar un mensaje desde una página web selman .NET 0 02-06-2007 01:18:58
Usar Post para enviar información a otra página halizia PHP 3 20-12-2006 15:55:12
enviar instruccion de =SUM desde delphi 5 a excel mayte mtz Varios 2 06-12-2006 17:52:28


La franja horaria es GMT +2. Ahora son las 17:54:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi