PDA

Ver la Versión Completa : Leer value de input HTML WebBrowser


StartKill
19-01-2009, 18:46:22
Buenas al foro.

Estoy trabajando con Delphi 7 y utilizando el componente WebBrowser de la pestaña Internet.

En este estoy cargando una pagina web, que leo de un url especifico.

Existe forma que desde Delphi pueda leer el valor de un determinado elemento de dicha pagina?

Por ejemplo, en dicha pagina hay 12 intput y eston tienen sus value y deseo solo jalar los dos ultimos values del conjunto de inputs

Your friend

StartKill
Lima-Perú

roman
19-01-2009, 22:16:58
Para acceder a los distintos elementos de la página, debes acceder al DOM (document object model), y el punto de entrada a éste es la propiedad WebBrowser.Document.

Esta propiedad es una interfaz que tienes que moldear de acuerdo a lo que requieras. Por ejemplo, la interfaz IHTMLDocument3 (http://msdn.microsoft.com/en-us/library/aa752541(VS.85).aspx) contiene el método getElementsByName (http://msdn.microsoft.com/en-us/library/aa752544(VS.85).aspx) que te devuelve la lista de todos los elementos que lleven un nombre dado. Si sólo hay un elemento con ese nombre, la lista contendrá un sólo elemento (el de índice 0).

Tal elemento debes averiguar si es del tipo deseado, lo cual logras preguntando a la interfaz si soporta la interfaz deseada, por ejemplo la de IHTMLInputElement. De ser así, podrias verificar si es del tipo adecuado (TEXT) y entonces tomar su propead value.

Te dejo un ejemplo, que carga la página de búsqueda avanzada (http://www.google.com.mx/advanced_search) de Google y lee el valor del campo Dominio que se llama as_sitesearch:


uses MSHTML;

procedure TForm1.WebBrowser1DocumentComplete(
Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
Document: IHTMLDocument3;
Collection: IHTMLElementCollection;
Element: IHTMLElement;
InputElement: IHTMLInputElement;

begin
Document := (WebBrowser1.Document as IHTMLDocument3);
Collection := Document.getElementsByName('as_sitesearch');

if (Collection.length >= 0) then
begin
Element := Collection.item(0, 0) as IHTMLElement;
Element.QueryInterface(IHTMLInputElement, InputElement);

if Assigned(InputElement) and (InputElement.type_ = 'text') then
ShowMessage(InputElement.value);
end;
end;


Si te fijas, el código está en el evento OnDocumentComplete, para asegurarte que ya está descargado todo el documento al momento de buscar el elemento.

// Saludos

kurono
20-01-2009, 02:03:39
amigo roman el codigo funciona pero como saber cual es el nombre del valor de un campo

roman
20-01-2009, 02:11:02
Bueno, se supone en este código, que uno sabe de antemano qué pagina vas a descargar. Entonces, bastaría que examines el código html de la página en cuestión para ver como están nombrados los campos. Si usas FireFox, tienes la extensión Web Developer que te permite saber de manera muy fácil, qué formularios y qué campos hay en una página dada.

// Saludos

kurono
20-01-2009, 02:15:12
ok muchas gracias

StartKill
20-01-2009, 18:37:56
Amigo "roman", muchas gracias:), me sirvió de mucho el codigo.

Your friend

Startkill
Lima-Perú

madiazg
24-01-2009, 15:19:49
Hola,
gracias por la información. Con este código puedo obtener los datos contenidos en un campo tipo formulario.
EL problema que planteo es como consecuencia de obtener las coordenadas de la siguiente página:

guiarte.com (http://www.guiarte.com/mapas-google/desarrolloweb/marca-y-bocadillo.php)

Si observan el código fuente de la página, la latitud y la longitud viene recogidos en las 'variables' point.lat() y point.Lng()

¿Cómo podría obtener en mi programa delphi dichos valores?

Saludos...
Miguel Angel
Imagen3D (http://imagen3d.site88.net)

jucabb
05-03-2010, 17:38:06
Estoy tratando de hacer esto en tiempo real o loop para ver como varian los valores cada minuto, sin tener que presionar un boton para ver las lecturas de variables. Sin embargo, siempre me lee lo mismo.
Por favor, alguna sugerencia?
Gracias,
Juan C.