Jump to content


Photo

Capturar dato de pagina web en delphi


  • Please log in to reply
10 replies to this topic

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 17 July 2014 - 05:17 PM

Hola a todos
Me pregunto: Se podra capturar un dato de una pagina web en delphi.
En la pagina en cuestion cuando se pasa el mouse por cierto sitio sale una ventana pequeña tipo popup al lado del puntero.
Esta ventana contiene datos que me gustaria poder capturar en ese momento.
Se podra ?
Como ?
Me mostrais codigo por favor (para mi  :)
Graciias
Saludos
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 17 July 2014 - 06:51 PM

Usando GetElementByTagName.

Saludos.
  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 17 July 2014 - 09:22 PM

Hola
Gracias amigo, muy interesante tendre que practicar mucho para entenderlo. :
Pregunto: Y si el texto es mas largo, por ejemplo cuatro lineas ?
Como lo meteria en un menu o algo asi ?
Saludos
PD: veo que captura el texto sin necesidad de indicar la pagina, me imagino que debe ser la activa en ese momento ?
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6301 posts
  • LocationArgentina

Posted 17 July 2014 - 09:52 PM

No necesariamente. Fíjate que en las funciones de ejemplo que están en el documento que te pasó Fernando reciben como parámetro el Document que genera el TWebBrowser, y el nombre de la clase del objeto HTML que tu deseas recuperar o capturar.
Basta con que pongas un componente TWebBrowse en tu aplicación y le pases la dirección web a navegar. Luego ya llamas a la función del ejemplo y le pasas como parámetro el Document del TWebBrowser. Si no recuerdo mal el TWebbrowser cuenta con un evento que se dispara cuando la página se ha cargado por completo, puede ser de utilidad justamente aprovechar este evento para llamar a la función.

Lo fundamental es que tengas identificado la clase HTML. Si no sabes cómo proceder, simplemente ve al menú ver código fuente en tu navegador (Chrome, o el que uses). Luego busca el texto que te interesa. Estará encerrado entre alguna etiqueta HTML (<></>) fijate que en la parte <> aparecerá un "class=algo". Justamente "algo" es el nombre de la clase que te interesa.

Espero que se entienda.

Saludos,
  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 19 July 2014 - 08:53 AM

Hola
Muchas gracias amigo, voy a revisarlo poco a poco a ver si lo llego a entender.
Saludos
  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 19 July 2014 - 09:41 AM

Hola
Bueno he tratado pero la verdad no me sale.
Me podeis dar algun codigo para poder entenderlo mejor ?.
Saludos
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 19 July 2014 - 10:04 AM

En el mismo link presentan un ejemplo supongamos que tienes una web asi (OJO: esa web debe estar cargado en un TWEBBROWSER):



html5
  1. </head>
  2. <div id="delphi">Algun texto</div>
  3. </body>
  4. </html>



si quieres obtener el texto "Algun texto" que esta encerrado dentro de una etiqueta <div> cuyo id del mismo se llama "delphi", aplicamos la funcion donde wb1 es el nombre del TWebBrowser:



delphi
  1. ShowMessage(GetElementById(wb1.Document,'delphi'));



Saludos.
  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 19 July 2014 - 10:58 AM

Hola
No me sale nada  :
Mira lo que tengo:



delphi
  1. var
  2.   Form1: TForm1;
  3.  
  4. implementation
  5.  
  6. {$R *.dfm}
  7.  
  8. function GetInnerElementById(const Doc: IDispatch; const Id: string): WideString;
  9. var
  10.   Document: IHTMLDocument2;    // IHTMLDocument2 interface of Doc
  11.   Body: IHTMLElement2;          // document body element
  12.   Tags: IHTMLElementCollection; // all tags in document body
  13.   Tag: IHTMLElement;            // a tag in document body
  14.   I: Integer;                  // loops thru tags in document body
  15. begin
  16.   Result :='';
  17.   // Check for valid document: require IHTMLDocument2 interface to it
  18.   if not Supports(Doc, IHTMLDocument2, Document) then
  19.     raise Exception.Create('Invalid HTML document');
  20.   // Check for valid body element: require IHTMLElement2 interface to it
  21.   if not Supports(Document.body, IHTMLElement2, Body) then
  22.     raise Exception.Create('Can''t find <body> element');
  23.   // Get all tags in body element ('*' => any tag name)
  24.   Tags := Body.getElementsByTagName('*');
  25.   // Scan through all tags in body
  26.   for I := 0 to Pred(Tags.length) do
  27.   begin
  28.     // Get reference to a tag
  29.     Tag := Tags.item(I, EmptyParam) as IHTMLElement;
  30.     // Check tag's id and return it if id matches
  31.     if AnsiSameText(Tag.id, Id) then
  32.     begin
  33.       Result := Tag.innerHTML;
  34.       Break;
  35.     end;
  36.   end;
  37. end;
  38.  
  39. procedure TForm1.Button1Click(Sender: TObject);
  40. begin
  41.   WebBrowser1.Navigate(Edit1.Text);
  42. end;
  43.  
  44. procedure TForm1.Button2Click(Sender: TObject);
  45. begin
  46.   WebBrowser1.GoBack;
  47. end;
  48.  
  49. procedure TForm1.Button3Click(Sender: TObject);
  50. begin
  51.   WebBrowser1.GoForward;
  52. end;
  53.  
  54. procedure TForm1.Button4Click(Sender: TObject);
  55. begin
  56.   ShowMessage(GetElementById(wb1.Document,'delphi'));
  57. end;
  58.  
  59. end.



me dice:
[Error] Unit1.pas(82): Undeclared identifier: 'GetElementById'
[Error] Unit1.pas(82): Undeclared identifier: 'wb1'
[Error] Unit1.pas(82): 'END' expected but ',' found

que hago ?
Saludos
  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 19 July 2014 - 11:11 AM

Agregaste la Unidad MSHTML en el Uses?.

Saludos.
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6301 posts
  • LocationArgentina

Posted 19 July 2014 - 12:40 PM

Reemplaza wb1 por webBrowser1. Allí tienes uno de los errores, agrega la uses que indica fernando.

Ten en cuenta que la página ya debe estar 100% cargada, de lo contrario no tienes todas las garantías de que logre encontrar el contenido.
No recuerdo mucho del uso de TWebBrowser, pero creo que la manera más segura de navegar era emplear Navegate2, que recibe unos parámetros adicionales opcionales.
También cuenta con el evento OnNavigateComplete2 o algo parecido que te permitirá saber que efectivamente se ha cargado toda la página.

Si usas D6 no estoy completamente seguro que tan compatible sea el componente con las nuevas versiones de HTML, uso de Flash, JavaScript y/o AJAX. El componente no es más que un envoltorio al motor del Internet Explorer y para cuando salió D6 no se imaginaban tantas cosas que se vendrían para la web. Si la web que deseas navegadar y consultar está diseñada con tecnología más actual yo que tu tomaría con pinzas de que funcione al 100% el componente.

Saludos,
  • 0

#11 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 19 July 2014 - 01:20 PM

Hola
Gracias amigos, ya no me da los errores, necesito ir viendo mas cosas, pero voy aprendiendo.
Gracias.
saludos
  • 0




IP.Board spam blocked by CleanTalk.