Selection d'un mot dans une page web

Résolu
nico8888 Messages postés 6 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 13 août 2007 - 8 août 2007 à 21:08
nico8888 Messages postés 6 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 13 août 2007 - 10 août 2007 à 14:30
Bonjours à tous,

Voila j'ai récupéré une partie d'un code qui est sensé repérer puis sélectionner un mot dans une page web ( ici le mot images de google) puis cliquer dessus. Je l'ai essayé chez moi, donc avec un WebBrowser et 2 boutons mais il ne fonctionne pas, après plusieurs heures de recherche en vain, je décide de m'en remettre à vous.

merci d'avance à tous les passionnés de delphi.

procedure TForm1.Button1Click(Sender: TObject);

begin

WebBrowser1.Navigate('www.google.fr')

end;

procedure TForm1.Button2Click(Sender: TObject);

var

  i : Integer;

 

begin

  for i:=0to Webbrowser1.OleObject.Document.anchors.Length-1do  begin

    if Webbrowser1.OleObject.Document.anchors.Item(i).InnerText = 'Images'then

              Webbrowser1.OleObject.Document.anchors.Item(i).Click  ;

    end ;

  end;

end.

4 réponses

sylvunix Messages postés 93 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 4 mars 2009
9 août 2007 à 13:40
Voici une solution que j'ai testé ...

uses ..., MSHTML, ActiveX, ComObj;

.../...

procedure TForm1.Button2Click(Sender: TObject);
const
  texteRecherche = 'Images';
var
  iDocument: IHTMLDocument2;
  iElement: IHTMLElement2;
  iElementCollection: IHTMLElementCollection ;
  iDomNode: IHTMLDOMNode;
  iDispatchCollection, iDispatchAttribute: IDispatch;
  iAttributesCollection: IHTMLAttributeCollection;
  iDomAttribute: IHTMLDOMAttribute;
  i, j: Integer;
  v: OleVariant;
begin
  iDocument := WebBrowser1.Document as IHTMLDocument2;
  iElementCollection:= iDocument.Links;
  for i := 0 to iElementCollection.Length-1 do
  begin
    iElement:= iElementCollection.Item(i,0) as IHTMLElement2;
    iElement.QueryInterface(IID_IHTMLDOMNode, iDomNode);
    iDispatchCollection := iDomNode.Attributes;
    if iDispatchCollection <> nil then
    begin
      iDispatchCollection.QueryInterface(IID_IHTMLAttributeCollection, iAttributesCollection);
      for j := 0 to iAttributesCollection.Length-1 do
      begin
        v := j;
        iDispatchAttribute:=iAttributesCollection.Item(v);
        iDispatchAttribute.QueryInterface(IID_IHTMLDOMAttribute ,iDomAttribute);
        if iDomAttribute.Specified then
        begin          if (iDomAttribute.nodeName 'href') and (iElement.getAdjacentText('afterBegin') texteRecherche) then
            WebBrowser1.Navigate(iDomAttribute.nodeValue);
        end;
      end;
   end;
  end;
end;
3
nico8888 Messages postés 6 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 13 août 2007
9 août 2007 à 14:01
 Merci beaucoup sylvunix pour ton code je viens de le tester et il marche à merveille.
C'est vraiment super sympat de ta par.

Un grand Mercie.
3
nico8888 Messages postés 6 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 13 août 2007
10 août 2007 à 14:30
Je suis encore bloqué, car le mot de la page HTML que je voulais repérer puis valider par un clic ne renvoi pas à une URL de type (exemple site google)

<href= "http://images.google.fr/imghp?ie=UTF-8&amp;oe=UTF-8&amp;hl=fr&amp;tab=wi"onclick="return qs(this)">Images

non le mot que je veux clicker agit et modifie la page html sans changer l'URL

exemple:

[# Choix au
hasard]

en fait ça rempli une grille de type LOTO qui est à la base vide  de manière aléatoire

Donc je te remercie sylvunix ton code marche sans aucun problème et m'a appris mais j'avais mal analysé le code source de la page html sur laquelle je souhaite agir.
Au final je suis de nouveau bloqué.
je pense que mon pb se situe à la fin de ton code sylvunix

WebBrowser1.Navigate(iDomAttribute.nodeValue);
        end;
      end;
   end;
  end;
end;

je pense que WebBrowser1.Navigate est mon pb car je ne souhaite pas me diriger sur une URL mais modifer onclick ="return(numbersRandomSelect()) cette fameuse page.

j'espère ne pas avoir été trop compliqué dans mes explications.
Merci à vous.
3
nico8888 Messages postés 6 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 13 août 2007
9 août 2007 à 13:44
Merci beaucoup sylvunix pour ton code je vais le tester tous de suite.

Mercie.
0
Rejoignez-nous