Question sans doute pas très facile à répondre.
Comment sélectionner un mot dans une page affichée par un TWebbrowser et envoyer à cette dite page un double-clic (qui déclenche un script java)?
Question sans doute pas très facile à répondre.
Comment sélectionner un mot dans une page affichée par un TWebbrowser et envoyer à cette dite page un double-clic (qui déclenche un script java)?
La theorie par rappor à ce qu je connais en VB...
Une fois ta page ouverte , tu as un objet HTMLDocument
TWebbRowser.Document ...
tu peu parcourir les éléments ( HTMLDTElement..) contenues dans
TWebbrowser.Document.All ou pour limiter un peu tu peu utiliser .DOcument.getElementsByTagName("A") qui limite au balise <A> et t'arreter sur l'élément dont la priorité innerText est égale au texte sur lequel tu désire cliquer ensuite tu applique la méthode Click sur cet élément ....
PS : Je débute en Delphi ... et je ne trouve pas le composant TWebbbrowser ... il n'est pas dasn ma boite à outils ( pas de catégorie Internet ...) ? comment le rajouter ?
![]()
Un exemple pour compléter la suggestion.
On suppose une page avec un formulaire comportant deux zones de saisie et un bouton.
Une précision cela marche très bien sauf pour élément de type input file javascript, il est impossible de forcer la valeur par un nom de fichier envoyé à la volée. C'était mon problème et en m'inspirant de la FAQ ( section Indy ) j'ai trouvé une autre solution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;const pDisp: IDispatch; var URL: OleVariant); var iDoc: IHtmlDocument2; i: integer; ov: OleVariant; iDisp: IDispatch; iColl: IHTMLElementCollection; iInputElement: IHTMLInputElement; begin WebBrowser1.ControlInterface.Document. QueryInterface(IHtmlDocument2, iDoc); if not assigned(iDoc) then begin ShowMessage(' !!!??? Aucun chargement ... '); Exit; end; ov := 'INPUT'; IDisp := iDoc.all.tags(ov); if assigned(IDisp) then begin IDisp.QueryInterface(IHTMLElementCollection, iColl); if assigned(iColl) then begin for i := 1 to iColl.Get_length do begin iDisp := iColl.item(pred(i), 0); iDisp.QueryInterface(IHTMLInputElement, iInputElement); if assigned(iInputElement) then begin if iInputElement.Get_name = 'login' // Champ de saisie d'un login ,nommé login en javascript then iInputElement.Set_value('toto'); if iInputElement.Get_name = 'passwd' // Champ de saisie d'un pass ,nommé passwd en javascript then iInputElement.Set_value('1234567890'); //Déclenchement d'un bouton nommé save qui balance un submit if iInputElement.Get_name = '.save' then iInputElement.Get_form.submit; // Envoie le titre de la page courante dans la barre de titre Caption := Webbrowser1.OleObject.Document.Title end; end; end; end; end;
Il n'y a plus de formulaire html, le formulaire est une form Delphi et j'envoie toutes les variables y compris le chemin du fichier à uploader sur le serveur Web. Cela marche nickel...
Amitiés à tous
Merci pour ta réponse mais mon mot à sélectionner n'est pas un élément de formulaire mais un simple mot. Je veux le sélectionner et envoyer un double-clic dessus.Envoyé par giloutho
la procédure que je t'ais soumise c'est un simple click ... malheureusement je ne connais pas assez Delphi ..pour t'envoyer un code fonctionnell ...déjà je bute sur ce controle TWwebbrowser que je ne trouve pas ...Envoyé par sfpx
Mon twebbrowser est dans mon onglet Internet.
Peut-ête dois-tu importer l'activeX? Je ne me souviens pas.
J'ai trouvé la moitié de ma solution
Ça marche très bien pour sélectionner le mot de mon choix.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure tform1.selectword(lemot:widestring); var selection:IHTMLSelectionObject; textrange:IHTMLTxtRange; begin selection:=(webbrowser1.document as IHTMLDocument2).selection; TextRange := Selection.CreateRange as IHTMLTxtRange; textrange.findtext(lemot,length(lemot),0); textrange.select; end;
Me reste maintenant à envoyer un double-clic sur la page (ça peut être n'importe-où c'est pas important).
Qqun sait?
sendmessage(webbrowser1.handle,WM_LBUTTONDBLCLK,0,0);
ne marche pas.
En fait je crois que finalement le double-clic doit être fait sur le mot.
Plus ça va plus je crois que je devrai procéder autrement.
bon pour le double click .. j'ai pas trouver mais pour un click simple sur um mot ... par exemple le mot images de la page d'acceuil google...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 procedure TForm1.Button1Click(Sender: TObject); begin WebBrowser1.Navigate('www.google.fr') end; procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin for i:=0 to Webbrowser1.OleObject.Document.anchors.Length-1 do begin if Webbrowser1.OleObject.Document.anchors.Item(i).InnerText = 'Images' then Webbrowser1.OleObject.Document.anchors.Item(i).Click ; end ; end; end.![]()
![]()
Partager