СообЧа > Дельфинарий > Запуск функций Javascript в Webbrowser/ IE Document

 

Запуск функций Javascript в Webbrowser/ IE Document

uses
   MSHTML_TLB, SHDocVw, ShellAPI;

// функция для запуска функций в скрипте

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;

// 2 примера как можно залогинится на домашнюю страницу gmx

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;

   // счетчик форм в документе
   IEFieldsCounter := 0;
   for m := 0 to Document.forms.Length - 1 do
   begin
     ovElements := Document.forms.Item(m).elements;

     for i := ovElements.Length - 1 downto 0 do
     begin
       try
       // если поле найдено, пытаемся заполнить его
       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
         // ошибка...
       end;
     end; { for i...}
   end; { for m }
   // если поля заполнены, попытаемся отправить.
   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;
   // получаем экземпляр Internet Explorer'а
   for k := 0 to ShellWindow.Count do
   begin
     spDisp := ShellWindow.Item(k);
     if spDisp = nil then Continue;
     // QueryInterface определяет может ли интерфейс работать с объектами
     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;

// пример 1: с помощью IE броузера
procedure TForm1.Button1Click(Sender: TObject);
begin
   ShellExecute(Handle,
     'open',
     'http://www.gmx.ch',
     nil,
     nil,
     SW_SHOW);
   Sleep(2000);
   LoginGMX_IE('user@gmx.net', 'pswd');
end;


// пример 2: с помощью Webbrowser
procedure TForm1.Button2Click(Sender: TObject);
var
   IDoc1: IHTMLDocument2;
   Web: ShDocVW_TLB.IWebBrowser2;
begin
   Webbrowser1.Navigate('http://www.gmx.ch');
   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;



Рейтинг@Mail.ru Rambler's Top100 Яндекс цитирования

Спасибо, что посетили наш сайт.
Copyright © 2000-2008 Сообщество Чайников
Контактная информация  О проекте