Авторизоваться в twebbrowser и выбрать пункт меню

Тема в разделе "Delphi - Компоненты", создана пользователем Shouldercannon, 20 июл 2015.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Доброго времени суток!
    Есть задача:
    1. Загрузить ссылку в TWebBrowser и в нём же произвести авторизацию
    2. Войти в нужный пункт меню и нажать кнопку
    Помогите, пожалуйста, реализовать?
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    1. Загрузить страницу
    Код (Delphi):
    Webbrowser1.Navigate('http://www.blabla.bla');
    while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
    2. Получить интерфейсы IHTMLDocument2 и IHTMLWindow2
    Код (Delphi):

    uses MSHTML;
    // . . .
    var
    Doc: IHTMLDocument2;
    HTMLWindow : IHTMLWindow2;
    // . . .
    Webbrowser1.Document.QueryInterface(IHTMLDocument2, Doc);
    HTMLWindow := Doc.parentWindow;
     
    3. Отыскать форму с авторизацией и заполнить контролы логина и заполнить значения
    Код (Delphi):
    var
    ovElements: OleVariant;
    // . . .
     
    for i := 0 to Doc.Forms.Length - 1 do begin
      ovElements := Doc.Forms.Item(i).elements;
     
      for j := ovElements.Length - 1 downto 0 do begin
         if (ovElements.Item(j).tagName = 'INPUT') and (ovElements.Item(j).type = 'text') then
           ovElements.item(j).Value := 'блалогин';
      // . . .
      end;
    // . . .
    end;
     
    4. Отправтить форму (залогиниться)
    можно напрямую
    Код (Delphi):
    Doc.Forms.Item(i).submit();
    или через метод execScript окна (если известен ID имя формы)
    Код (Delphi):
    HTMLWindow.execScript('document.<loginFom>.submit()', 'JavaScript'); // <loginForm> - ID имя формы
    А вот это уже к экстрасенсам...
    Меню на HTML-странице можно реализовать 128-ю с половиной способами... :)
     
  3. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Вот так получилось.
    Код (Delphi):
    procedure TForm6.Button1Click(Sender: TObject);
    var
      Form: OleVariant;
      I, I2: Integer;
    begin
      for I := 0 to WebBrowser1.OleObject.Document.Forms.Length - 1 do
      begin
        Form := WebBrowser1.OleObject.Document.Forms.Item(I).elements;
     
     
     
     
        for I2 := 0 to Form.Length - 1 do
        begin
          if Form.Item(I2).name = 'log_email' then Form.Item(I2).value := ELogin.Text
          else if Form.Item(I2).name = 'pass' then Form.Item(I2).value := EPassword.Text;
     
     
     
     
          Button2.Click;
        end;
      end;
    end;
     
     
     
     
    procedure TForm6.Button2Click(Sender: TObject);
    var
      Form: OleVariant;
      I, I2: Integer;
    begin
      for I := 0 to WebBrowser1.OleObject.Document.Forms.Length - 1 do
      begin
        Form := WebBrowser1.OleObject.Document.Forms.Item(I).elements;
     
     
     
     
        for I2 := 0 to Form.Length - 1 do
        begin
          if ((Form.Item(I2).type = 'submit') and (Form.Item(I2).value = 'Войти')) then
          begin
            Form.Item(I2).Click;
          end;
        end;
      end;
    end;
     
    #3 Shouldercannon, 21 июл 2015
    Последнее редактирование модератором: 22 июл 2015
Загрузка...

Поделиться этой страницей