2010-09-01 29 views
0

J'essaie de soumettre automatiquement un formulaire et de sauvegarder l'image résultante qui s'affiche dans l'objet TWebBrowser.TWebBrowser - Hook receive event

L'image se charge sur plusieurs enchaînées javascript ajax demandes(), jusqu'à ce qu'il apparaisse enfin dans le document.

Quel est le meilleur moyen d'obtenir cette image? Je pensais à accrochant la fonction de réception pour pouvoir voir la réponse http (qui serait fondamentalement mon image).

Une autre possibilité pourrait être de charge l'image du cache/mémoire ...

Je n'ai aucune idée comment faire pratiquement, j'espère que quelqu'un peut vous aider.

Merci.

Répondre

1

Vous pouvez récupérer toutes les images d'URL à l'aide de la propriété images à partir de l'objet IHTMLDocument2.

voir cet exemple en utilisant l'événement OnDocumentComplete.

procedure TForm2.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); 
var 
HTMLDocument2: IHTMLDocument2; 
i   : Integer; 
Item   : IHTMLElement; 
ImageUrl  : string; 
begin 
    HTMLDocument2 := (WebBrowser1.Document AS IHTMLDocument2); 
    for i := 0 to HTMLDocument2.images.length -1 do 
    begin 
    Item := HTMLDocument2.images.item(i, null) As IHTMLElement; 
    ImageUrl:=item.getAttribute('src',0); 
    //do your stuff with the url image retrieved 
    end; 
end; 
+0

Merci, cela a fonctionné. Toute idée comment je peux télécharger une image via TWebBrowser (j'ai besoin des mêmes données de session/cookies, donc je ne peux pas utiliser urlmon/indy/...) – maxedmelon

1

Vous pouvez utiliser les OnDocumentComplete ou OnNavigateComplete2 événements (voir l'aide SHDocVw) ou attendre la WebBrowser d'être dans un ReadyState READYSTATE_COMPLETE puis lu à partir du WebBrowser.Document.

Mais vous pouvez également (plus simple IMO) utiliser un TIdHTTP.Get pour obtenir directement le flux de réponse.

+0

J'ai besoin de connaître l'URL de l'image exacte pour le TidHTTP.Get, ce qui n'est pas si simple. Également je ne peux pas lire l'image à partir du document, car ce n'est pas tag, mais chargé dans un conteneur via AJAX. – maxedmelon

+0

"Je ne peux pas lire l'image du document" ... Pas vrai. Vous pouvez utiliser la collection d'images et vous avez accès à tout ce qui se trouve dans le document. –

+0

oui, désolé. Je l'ai fait fonctionner maintenant. vous aviez raison :) – maxedmelon

1

Pour être plus évolutif avec votre application, vous pouvez directement essayer EmbeddedWB. Il enveloppe IWebBrowser2 et très pratique à utiliser. Embarcadero utilise EmbeddedWB dans leur RADStudio.

+0

Va chercher le nouveau RAD Studio et essayer. J'ai vu un objet TIEDownload aussi. Si j'ai de la chance, il télécharge un fichier en utilisant les mêmes données de session que l'objet TWebBrowser ... – maxedmelon