this slowpoke moves

Execute a Java-Script function

Als erstes ladest du dir die 2 Komponenten herunter und bindest sie ins Projekt ein.

SHDocVw_TLB :  Download
MSHTML_TLB :  Download

..dann implementierst du diesen Code.
uses SHDocVw, ShellAPI, SHDocVw_TLB, MSHTML_TLB

function ExecuteScript(doc: IHTMLDocument2; script: string; language: string): Boolean;
var
 win: IHTMLWindow2;
 Olelanguage: Olevariant;
begin
 if doc <> nil then
 begin
 try
 win := doc.parentWindow;
 if win <> nil then
 begin
 try
 Olelanguage := language;
 win.ExecScript(script, Olelanguage);
 finally
 win := nil;
 end;
 end;
 finally
 doc := nil;
 end;
 end;
end;

procedure FillInGMXForms(WB: ShDocVW_TLB.IWebbrowser2; IDoc1: IHTMLDocument2;
 Document: Variant; AKennung, APasswort: string);
const
 IEFields: array[1..4] of string = ('INPUT', 'text', 'INPUT', 'password');
var
 IEFieldsCounter: Integer;
 i: Integer;
 m: Integer;
 ovElements: OleVariant;
begin
 if Pos('GMX - Homepage', Document.Title) <> 0 then
 while WB.ReadyState <> READYSTATE_COMPLETE do
 Application.ProcessMessages;
 // count forms on document and iterate through its forms
 IEFieldsCounter := 0;
 for m := 0 to Document.forms.Length - 1 do
 begin
 ovElements := Document.forms.Item(m).elements;
 // iterate through elements
 for i := ovElements.Length - 1 downto 0 do
 begin
 try
 // if input fields found, try to fill them out
 if (ovElements.item(i).tagName = IEFields[1]) and
 (ovElements.item(i).type = IEFields[2]) then
 begin
 ovElements.item(i).Value := AKennung;
 Inc(IEFieldsCounter);
 end;

 if (ovElements.item(i).tagName = IEFields[3]) and
 (ovElements.item(i).type = IEFields[4]) then
 begin
 ovElements.item(i).Value := APasswort;
 Inc(IEFieldsCounter);
 end;
 except
 // failed...
 end;
 end; { for i...}
 end; { for m }
 // if the fields are filled in, submit.
 if IEFieldsCounter = 3 then ExecuteScript(iDoc1, 'document.login.submit()',
 'JavaScript');
end;

function LoginGMX_IE(AKennung, APasswort: string): Boolean;
var
 ShellWindow: IShellWindows;
 WB: ShDocVW_TLB.IWebbrowser2;
 spDisp: IDispatch;
 IDoc1: IHTMLDocument2;
 Document: Variant;
 k: Integer;
begin
 ShellWindow := CoShellWindows.Create;
 // get the running instance of Internet Explorer
 for k := 0 to ShellWindow.Count do
 begin
 spDisp := ShellWindow.Item(k);
 if spDisp = nil then Continue;
 // QueryInterface determines if an interface can be used with an object
 spDisp.QueryInterface(iWebBrowser2, WB);

 if WB <> nil then
 begin
 WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
 if iDoc1 <> nil then
 begin
 WB := ShellWindow.Item(k) as ShDocVW_TLB.IWebbrowser2;
 Document := WB.Document;
 // if GMX page...
 FillInGMXForms(WB, IDoc1, Document, AKennung, APasswort);
 end; { idoc <> nil }
 end; { wb <> nil }
 end; { for k }
end;
Beispiel 1 :
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShellExecute(Handle,
 'open',
 'http://www.gmx.net',
 nil,
 nil,
 SW_SHOW);
 Sleep(2000);
 LoginGMX_IE('user@gmx.net', 'pswd');
end;
Beispiel 2 :
procedure TForm1.Button2Click(Sender: TObject);
var
 IDoc1: IHTMLDocument2;
 Web: ShDocVW_TLB.IWebBrowser2;
begin
 Webbrowser1.Navigate('http://www.gmx.net');
 while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
 Application.ProcessMessages;
 Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);
 Web := WebBrowser1.ControlInterface;
 FillInGMXForms(Web, iDoc1, Webbrowser1.Document, 'user@gmx.net', 'pswd');
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate