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

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

3 réponses

Répondre au sujet
sylvunix 103 Messages postés mardi 11 avril 2006Date d'inscription 4 mars 2009 Dernière intervention - 13 août 2007 à 09:10
0
Utile
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
sylvunix 103 Messages postés mardi 11 avril 2006Date d'inscription 4 mars 2009 Dernière intervention - 13 août 2007 à 14:02
0
Utile
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
nico8888 6 Messages postés dimanche 5 août 2007Date d'inscription 13 août 2007 Dernière intervention - 13 août 2007 à 12:23
-2
Utile
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.