Valider un bouton d'une page web autom [Résolu]

Signaler
Messages postés
6
Date d'inscription
dimanche 5 août 2007
Statut
Membre
Dernière intervention
13 août 2007
-
Messages postés
6
Date d'inscription
dimanche 5 août 2007
Statut
Membre
Dernière intervention
13 août 2007
-
Je cherche une métode pour valider un bouton d'une page web charger dans un WebBrowser automatiquement.


le morceau de code que je vous présente m'à était transmi par "sylvunix"(que je remerci).

Ce code repère puis valide d'un click automatiquement un mot d'une pages web, ici le mot images de Google.

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;

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


exemple: le bouton"Choix au hasard"de la page web sur laquelle je souhaite agir.


[# Choix au
hasard]


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


je pense que mon pb se situe à la fin du code de "sylvunix"


WebBrowser1.Navigate(iDomAttribute.nodeValue);

end;


je pense que WebBrowser1.Navigate est mon pb car je ne souhaite pas me
diriger sur une URL mais valider onclick="return(numbersRandomSelect())
de la fameuse page web charger dans mon webbrowser.


j'espère ne pas avoir été trop compliqué dans mes explications.

quelqu'un connait-il une solution?

Merci à vous.

nb: je m'excuse au près de sylvunix pour avoir mal analiser le code source de la page web sur laquelle je souhaite agir.

2 réponses

Messages postés
93
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
4 mars 2009

Bonjour nico8888,

Voici une variante n'utilisant pas Navigate.

Si cela ne fonctionne pas avec ton site, laisses-moi une url avec laquelle je pourrais effactuer le test ...

procedure TForm1.Button2Click(Sender: TObject);
const
  texteRecherche = 'Images';
var
  iDocument: IHTMLDocument2;
  iElement: IHTMLElement;
  iElement2: 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 IHTMLElement;
    iElement2:= iElementCollection.Item(i,0) as IHTMLElement2;
    iElement2.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 (iElement2.getAdjacentText('afterBegin') texteRecherche) then
            iElement.Click;
//            WebBrowser1.Navigate(iDomAttribute.nodeValue);
        end;
      end;
   end;
  end;
end;
Messages postés
6
Date d'inscription
dimanche 5 août 2007
Statut
Membre
Dernière intervention
13 août 2007

sylvunix je te remerci, la modification marche très bien, vraiment tu est trop fort.
Comment fait-on pour connaitre autant de code, de fonction, j'ai acheté un livre "le tout en poche Delphi7" pour les base il m'a semblé très bien, mais l'orsque je veut inover c'est pas pareil je cherche de nouvelle possibilitée dans l'aide de delphi mais je ne trouve pas exemple la modification que tu m'a apporté semble simple une fois qu'on l'a sous les yeux.

Enfin je te remerci pour tous.