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

Messages postés
6
Date d'inscription
dimanche 5 août 2007
Dernière intervention
13 août 2007
- - Dernière réponse : sylvunix
Messages postés
103
Date d'inscription
mardi 11 avril 2006
Dernière intervention
4 mars 2009
- 13 août 2007 à 14:02
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.
Afficher la suite 

Votre réponse

3 réponses

Messages postés
103
Date d'inscription
mardi 11 avril 2006
Dernière intervention
4 mars 2009
0
Merci
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;
Commenter la réponse de sylvunix
Messages postés
103
Date d'inscription
mardi 11 avril 2006
Dernière intervention
4 mars 2009
0
Merci
Arrête tu vas me faire rougir !!!

Les livres et l'aide en ligne c'est bien pour débuter ... Ensuite, c'est l'expérience qui fait la différence.

En ce qui concerne la question que tu avais posée, je n'avais pas la réponse. J'avais néanmoins analysé un excellent code de shining (WebMemo) qui m'avait permis de comprendre tous les mécanismes et ensuite de trouver la réponse (voir aussi MSHTML.pas).

En espérant te revoir bientôt sur delphifr ...

sylvunix

P.S. On a l'habitude sur ce site d'accepter les réponses techniques valides et non pas ses propres messages ...
Commenter la réponse de sylvunix
Messages postés
6
Date d'inscription
dimanche 5 août 2007
Dernière intervention
13 août 2007
-2
Merci
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.
Commenter la réponse de nico8888

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.