Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > WebBrowser


Автор: [m][a][n] 26.9.2004, 10:10
Всем Добрый Вечер!
Меня интересует вопрос следующего содержания:
Как можно программно с помощью компонента WebBrowser заполнить поля в браузере?
Тоесть к примеру:
сайт www.mail.ru открыть через WebBrowser ... нажать Button1 и чтобы пасс и логин сам по себе ввелся... (уже предворетельно заданный)
Как так сделать?

Автор: Alex 26.9.2004, 18:44
Код
{  
 This example shows how to automatically fill in a search string  
 in the "Search Tip" page and click the search button.  
}  

uses  
 MSHTML_TLB;  

// first navigate to tipspage  

procedure TForm1.Button1Click(Sender: TObject);  
begin  
 Webbrowser1.Navigate('http://www.swissdelphicenter.ch/en/tipsuchen.php');  
end;  

// Try to access IE instance and fill out the search field with  
// a text and click the search button  

procedure TForm1.Button3Click(Sender: TObject);  
var  
 hIE: HWND;  
 ShellWindow: IShellWindows;  
 WB: IWebbrowser2;  
 spDisp: IDispatch;  
 IDoc1: IHTMLDocument2;  
 Document: Variant;  
 k, m: Integer;  
 ovElements: OleVariant;  
 i: 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 IWebbrowser2;  
       begin  
         Document := WB.Document;  

         // count forms on document and iterate through its forms  
         for m := 0 to Document.forms.Length - 1 do  
         begin  
           ovElements := Document.forms.Item(m).elements;  
           // iterate through elements  
           for i := 0 to ovElements.Length - 1 do  
           begin  
             // when input fieldname is found, try to fill out  
             try  
               if (CompareText(ovElements.item(i).tagName, 'INPUT') = 0) and  
                 (CompareText(ovElements.item(i).type, 'text') = 0) then  
               begin  
                 ovElements.item(i).Value := 'FindWindow';  
               end;  
             except  
             end;  
             // when Submit button is found, try to click  
             try  
               if (CompareText(ovElements.item(i).tagName, 'INPUT') = 0) and  
                 (CompareText(ovElements.item(i).type, 'SUBMIT') = 0) and  
                 (ovElements.item(i).Value = 'Search') then  // Suchen fьr German  
               begin  
                 ovElements.item(i).Click;  
               end;  
             except  
             end;  
           end;  
         end;  
       end;  
     end;  
   end;  
 end;  
end;  


Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php

Автор: Jey_k 26.9.2004, 23:03
оффтоп: ВОТ ТАК И ПОЯВЛЯЮТСЯ БОТЫ

Автор: [m][a][n] 27.9.2004, 17:59
Супер!
Большое спасибо!
А можно, если не трудно, конкретный пример привести?
Взять какой небудь сайт и на нем показать, опять же, если не сложно всё это...
Зарание спасибо!
Добавлено @ 18:00
Млин, тут же уже приводится конкретный пример!
Всем большое спасибо!
Этот топик можно прикрыть!
Добавлено @ 18:06
Млин, рано я обрадовался!
Как подключить или где взять это:

uses
MSHTML_TLB;

Зарание спасибо!

Автор: od0201 30.10.2012, 16:46
форма заполнилась, но только в открытом дополнительно ИЕ, а в программе нет. 
Подскажите причину и как устранить?

spDisp равен nil Если страница запущена в TWebBrowser

Автор: MetalFan 30.10.2012, 22:56
ого, какая восставшая из мертвых у нас тут.
Цитата(od0201 @  30.10.2012,  16:46 Найти цитируемый пост)
но только в открытом дополнительно ИЕ, а в программе нет. 

так пример это и делает как раз...
тебе нужно получить интерфейс IWebBrowser от своего TWebBrowser, и дальше плясать от него.

Автор: od0201 31.10.2012, 11:05
Цитата

ого, какая восставшая из мертвых у нас тут.

Я не думаю что вы будете в восторге, если я начну плодить темы-двойники.
Цитата

так пример это и делает как раз...
тебе нужно получить интерфейс IWebBrowser от своего TWebBrowser, и дальше плясать от него.

как раз пример ничего и не делает, в чистом виде....
ShellWindow.Count=0 (т.е. находит 1 закладку)
spDisp = nil (не есть хорошо и на выход)

если же я при этом открываю ИЕ, и задаю ему ту же страницу что и в TWebBrowser, то...
ShellWindow.Count=1 (т.е. находит 2 закладки)
 и spDisp для  ИЕ != nil ,  и поля в ИЕ заполняются, а для TWebBrowser spDisp = nil   и для него програма не заполняет поля.

З.Ы. Может вы и правы, но я Вашей мысли не понял, я с Дельфи слабо знаком и возможно чего-то не понимаю. Но, интуиктивно,  я подозреваю что у меня что-то не установленно/не включено.... а по идее толжно также отрабатывать как и для ИЕ

Автор: MetalFan 31.10.2012, 22:30
Цитата(od0201 @  31.10.2012,  11:05 Найти цитируемый пост)
Я не думаю что вы будете в восторге, если я начну плодить темы-двойники.

а я не возражал против "поднятия" данной темы) просто очень уж она древняя оказалась)


Цитата(od0201 @  31.10.2012,  11:05 Найти цитируемый пост)
ShellWindow.Count=0 (т.е. находит 1 закладку)
spDisp = nil (не есть хорошо и на выход)

Это все вообще пропустить вплоть до начала работы с IWebBrowser2 интерфейсом.
Ссылку на этот интерфейс получать не приведенным в коде способом, а от вашего компонента TWebBrowser через св-во ControlInterface (на сколько я помню)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)