![]() |
Re: Editfelder in Farmes einer Website ansprechen
Hallo PacMan,
mit diesem Code navigiere ich zur Google-Seite und fülle das Eingabefeld q im Formular f:
Delphi-Quellcode:
Das müsste auch in einem FrameSet funktionieren, was ich aber nicht getestet habe. Wenn du damit immer noch Probleme hast, dann solltest du mal den URL geben.
unit MainFrm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, ComCtrls, StdCtrls, ExtCtrls, MSHTML; type TDemoForm = class(TForm) Panel: TPanel; UrlEdit: TEdit; LoadButton: TButton; StatusBar: TStatusBar; WebBrowser: TWebBrowser; procedure LoadButtonClick(Sender: TObject); procedure WebBrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); end; var DemoForm: TDemoForm; implementation {$R *.dfm} function GetFrameDoc(doc: IHTMLDocument2; v: OleVariant): IHTMLDocument2; var win: IHTMLWindow2; u: IUnknown; begin u := doc.frames.item(v); if Assigned(u) and Succeeded(u.QueryInterface(IHTMLWindow2, win)) then Result := win.Document else Result := nil; end; // preconditions: // - wb.Document fully loaded // returns first vElement in first vForm in any frame function GetInputElement(wb: IWebBrowser2; vForm, vElement: Variant): IHTMLInputElement; var iFrame: Integer; doc, frameDoc: IHTMLDocument2; fe: IHTMLFormElement; begin doc := wb.Document as IHTMLDocument2; if doc.frames.length = 0 then begin fe := doc.forms.item(vForm, 0) as IHTMLFormElement; if Assigned(fe) then Result := fe.item(vElement, 0) as IHTMLInputElement else Result := nil; end else for iFrame := 0 to Pred(doc.frames.length) do begin frameDoc := GetFrameDoc(doc, iFrame); fe := doc.forms.item(vForm, 0) as IHTMLFormElement; if Assigned(fe) then Result := fe.item(vElement, 0) as IHTMLInputElement else Result := nil; if Assigned(Result) then Exit; end; end; procedure TDemoForm.LoadButtonClick(Sender: TObject); begin with WebBrowser do Navigate(UrlEdit.Text); // [url]http://www.google.de[/url] end; procedure TDemoForm.WebBrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var ie: IHTMLInputElement; begin with Sender as TWebBrowser do if pDisp = DefaultInterface then begin ie := GetInputElement(DefaultInterface, 'f', 'q'); if Assigned(ie) then ie.value := 'hasta la vista' else ShowMessage('bad luck'); end; end; end. Freundliche Grüße |
Re: Editfelder in Farmes einer Website ansprechen
Kannst du mir vielleicht den Code erklären? Ich check da garnichts :gruebel:
|
Re: Editfelder in Farmes einer Website ansprechen
Schreck lass nach - muss ich jede Zeile erklären?
Was genau verstehst du denn nicht? |
Re: Editfelder in Farmes einer Website ansprechen
Nee, also die Zeile mit Unit und so is klar :mrgreen:
Mit diesem Programm durchsuchst du google.de nach forms, bzw. nach dem eingabefeld (q). Die Frameanzahl kriegst du hierdurch oder? Zitat:
Und woher weißt du denn, des die Form "f" heißt und das Eingabefeld "q"? |
Re: Editfelder in Farmes einer Website ansprechen
Der einfache Teil der Arbeit ist die Ermittlung der Form- und Feldnamen: FireFox bietet dazu den Menübefehl "Extras | Seiteninformationen".
Die Anzahl der Frames erhalte ich über "doc.frames.length". Mit GetFrameDoc() ermittle ich das Document eines bestimmten Frame. Viele Code-Zeilen zeigen einfach nur Zugriffe auf das HTML DOM oder den Wechsel zwischen früher und später Bindung bei COM Objekten. Wenn das für dich noch Neuland ist, dann solltest du dich da mal einlesen. Das HTML DOM ist im MS Windows SDK beschrieben und für die COM Programmierung gibt es sicherlich Tutorials. Zu GetFrameDoc gibt es ein paar Threads in der DP, welche diese Funktion in einen Beispielkontext stellen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz