Club Delphi  
    Paypal   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

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
En estos días de mensajes de 140 caracteres que duran no más de 140 segundos en la mente del lector, cualquier ayer es prehistoria.
Responder Con Cita
  #2  
Antiguo 30-09-2016
fqm33 fqm33 is offline
Miembro
NULL
 
Registrado: ago 2016
Posts: 18
Poder: 0
fqm33 Va por buen camino
Buenas Noches, compañeros, gracias por las respuestas, Bucanero tienes razón, lo que estoy tratando de crear es muy parecido, a lo que indicas, con alguna modificación muy pequeña (no se que tanto en código), que cuando lleno la información del formulario WEB desde Excel, el sistema verifica la información y me arroja un dato, que debo cargar al registro de Excel, y así con cada fila, y claro bucanero estoy muy interesado en tu asesoría y en la de todos, aunque tengo muchos vacíos, he aprendido un montón con sus comentarios.
como indicaba anteriormente estoy usando WebBrowser, y ahora estoy en la selección de una opción de un combobox, aquí el código HTML.

[HTML]
</td>
<td class="fila1">
<select name="ctl00$ph$ucProds$ddlClasificacion" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ph$ucProds$ddlClasificacion\',\'\')', 0)" id="ctl00_ph_ucProds_ddlClasificacion" tabindex="2" class="comboBox";">
<option selected="selected" value="">&lt;&lt;Seleccione&gt;&gt;</option>
<option value="29">Activa1</option>
<option value="27">Activa2</option>
<option value="28">Activa3</option>

</select>
</td>
[/HTML]

he tratado de usar varias(muchas) alternativas para escogerla pero ninguna me funciona, anexo una que cuando doy click dice metodo no soportado, sin embargo otras sacan otros tipos de error.
esta y las demás las he encontrado navegando por ahi,

Código Delphi [-]
WebBrowser1.Oleobject.Document.GetElementByID('ctl00$ph$ucProds$ddlClasificacion').GetElementsByTagN  ame('Option').element.GetAttribute('28').Click;

agradecería un ejemplo de como realizar la selección, o una forma mas optima y/o técnica de realizarlo, de nuevo muchas gracias.
Responder Con Cita
  #3  
Antiguo 30-09-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Yo no he usado el TWebBrowser, no al menos para algo como lo que pretendes hacer.

Yo no buscaría simular/emular las acciones por medio del Browser como si fuera un usuario... Al menos eso es lo que me queda y entiendo que estás intentando hacer. De lo que estoy percibiendo, pareciera, por ese código que estás intentando ejecutar un Click sobre una lista desplegable por medio del TWebBrowser.

Yo, como te dije, buscaría la forma de hacerlo por otra vía. Le pediría a la página que directamente me de los datos, y le pasaría los parámetros finales. No me tomaría la "molestia" de simular clics, seleccionar opciones, etc. Directamente le solicito al server lo que necesito y que el se encargue de generarme la página HTML final para que yo lea y guarde en mi archivo de excel, una base de datos, o lo que fuese lo que realmente necesito poder recuperar y tener de manera persistente.

Nota que todo con lo que interactúes se traduce en última en un valor que el escript php/asp se encargará de recibir por medio de un parámetro.

Necesariamente debe haber un trabajo de ingeniería inversa y ponerte a estudiar como es que recibe los datos.
Como te dije unos post antes... una selección por ejemplo desde una lista desplegable se traducirá en un valor que luego la página recibe como parámetro. De igual forma lo que le pongas en algún Edit/Caja de texto o como le llames. Al final todo se traduce en una orden POST o GET sobre la página y se le pasará los parámetros.
Empieza a hacer ese trabajo de ingeniería... prueba con cada opción, y fíjate que se le manda como parámetro, y como se construye la URL final.
Si no tienes idea de como hacer eso ¡dilo!

Luego simplemente lo que debes hacer es pedirle al componente Indy o el TWebBrowser que navege a esa URL. ¡Te evitas estar jugando la página! Directamente decile: "Mirá, dame esto". Y si el proceso implica interactuar con 2 o 3 páginas, no importa... cada una estará diseñada justamente para recibir los parámetros que espera. Lo que tu debes hacer es navegar en el orden correcto cada una y recuperar del HTML generado lo que necesites.

A lo que voy es que si no te tomas la molestia de hacer la ingeniería inversa vas a seguir lidiando con clicks, que navegar, esperar respuesta, volver a mandar otro click, etc.

Mi propuesta es justamente evitarte eso: ir a los bifes. Si tu proceso te lleva a lidiar con 3 o 5 páginas, no interesa. A todas les debes revisar como y que se pasan como parámetro.

Te estás complicando al pedo, y te lo digo con todo respeto. Y para poder ayudarte mucho más vas a tener que dejar de lado ese estado de secretismo. No hay otra forma de saber que estas haciendo realmente, si lo estás haciendo bien, o que... Ayúdanos a ayudarte. De otra forma seguirás lidiando y dando vueltas en lo mismo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 30-09-2016
fqm33 fqm33 is offline
Miembro
NULL
 
Registrado: ago 2016
Posts: 18
Poder: 0
fqm33 Va por buen camino
Buenas Noches, Delphius tomo nota de tus comentarios gracias, pues lo que dices es precisamente lo que estoy haciendo (simulando acciones), cuando dices ingeniería inversa es mirar el código HTML?; les comento lo que he ido haciendo:
- abro la pagina (webbrowser)
- ingreso el usuario - Webbrowser1.OleObject.Document.GetElementByID('ctl00$ContentPlaceHolder1$txtUserIni').SetAttribute(' value', 'ECM1112A');
- me abre la pagina de la contraseña
- ingreso la contraseña que genera el token
- me abre la pagina del menú principal - escojo la opción del menú (href)

Código Delphi [-]
  link := WebBrowser1.OleObject.Document.GetElementsByTagName('a');
  for i := 0 To Link.length -1 do
    if pos('/ACTIVACIONES/Http/Reingenieria/pagDispatcherEntrada.asp?Site=14',Link.item(i).href) <> 0 then
    Begin
      Link.item(i).Click;
      Sleep(100);
    End;

- me abre la pagina del ingreso de datos (hay es donde aparece el combobox del que les hablo) - hay voy.

como lo he hecho

miro el código fuente de cada pagina y asigno los clicks, que he ido necesitando, llenado los campos solicitados, y avanzando a los href correspondientes. Ahora he llegado a la pagina donde ingreso los
datos, dependiendo de la opción que seleccione, aparecen otros campos para llenar, y cuando acabo de llenar los campos se da click en un botón y el arroja el dato que necesito llevar a mi hoja de Excel.
No es ningún gran secreto (ja ja ja), es solo un aplicación para la empresa donde trabajo. tienes razón en que no tengo idea; Delphius dices que simular las acciones como si fuera un usuario,
y es que esa es la situación, a la empresa donde trabajo le asignan un usuario, y la contraseña se nos da por medio de un token. Ademas dices que esa no es vía - y creo que tienes razón, - pues te
comento por esta vía voy a pasos muy lentos, pero por las Indy que tu me recomendaste (y que la mayoría recomiendan), pues no encontré información básica como para ir aprendiendo y aplicando.
Agradezco sus orientaciones, y muchas gracias por tomarsen el trabajo de leer, analizar mis notas y apoyarmen.
Responder Con Cita
  #5  
Antiguo 30-09-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Ahora estoy por ir a dormir. Explicarte en profundidad el concepto de ingeniería inversa para este caso no me es posible ahora.
Si puedo darme un tiempo mañana por la tarde explico mejor el tema.
Y si en Delphi Starter está disponible Indy (no recuerdo ahora con seguridad si esta disponible) veo la posibilidad de dar un ejemplo básico para que te hagas una idea y extrapoles a tu caso.
Por lo pronto puedo decir que la idea es examinar con las herramientas para desarrolladores de los navegadores como se pasan los datos a los parámetros y de ir probando con la página hasta encontrar el dato en cuestion y de donde sale.
Si dices que todo depende de un token y una contraseña desde algún lado ese dato les he entregado. Si no es por medio o difundido desde el propio sitio, o bien haces que ese dato sea llenado por el usuario o le preguntas a él de donde lo saca y ves si hay forma de automatizarlo.
La ultima lección que te dejo es que no todo se puede (ni debiera) automatizar.

Saludos
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 05-10-2016
fqm33 fqm33 is offline
Miembro
NULL
 
Registrado: ago 2016
Posts: 18
Poder: 0
fqm33 Va por buen camino
buenas noches, compañeros, les comento que ya supere lo del combobox, y ya pude escoger la opción, encontré este código, y me ha funcionado bien,

Código Delphi [-]
  cb := WebBrowser1.OleObject.Document.GetElementByID('ctl00$ph$ucProds$ddlClasificacion');
  cb.value := '28';
  cb.FireEvent('onchange', v);

luego de esto viene el ciclo donde debo llenar los campos de la web, y traer lo que esta me arroja
inicialmente encuentro un input text, que corresponde al apellido del cliente; he tratado de llenarlo con este código
Código Delphi [-]
Webbrowser1.OleObject.Document.GetElementByID('ctl00$ph$ucFields$tbLastName').SetAttribute('value', 'rojas');
pero me saca error de violación de memoria, he aumentado el Sleep, pero sigue saliendo el mismo error, lo he probado con este otro pero me saca error metodo value no soportado

Código Delphi [-]
Webbrowser1.OleObject.Document.GetElementByID('ctl00$ph$ucFields$tbLastName').value, 'rojas');

Nota: lo de 'rojas', es por que estoy probando pero mas adelante debo asignarle el valor de la celda correspondiente
Responder Con Cita
  #7  
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
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 19:06:42
Enviar Datos a pagina web desde delphi tocomi Internet 3 18-02-2009 23:02:59
Problemas para enviar un mensaje desde una página web selman .NET 0 02-06-2007 00:18:58
Usar Post para enviar información a otra página halizia PHP 3 20-12-2006 14:55:12
enviar instruccion de =SUM desde delphi 5 a excel mayte mtz Varios 2 06-12-2006 16:52:28


La franja horaria es GMT +2. Ahora son las 14:07:05.


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