TChromium: заполнение и сабмит формы

Описание: Прочии темы
Модератор: Aleksandr

LILUS M
Автор темы, Старшина
Старшина
Аватара
LILUS M
Автор темы, Старшина
Старшина
Сообщения: 136
Зарегистрирован: 2 мая 2013
С нами: 10 лет 10 месяцев

#1 LILUS » 31 января 2014, 18:20

Wed, 20 Feb 2013 21:02:00 +0000

Опишу самый простой способ заполнения и отправки формы с использованием компонента TChromium. С доступом к DOM-элементам по id в нем дела обстоят не так хорошо, как в Webbrowser-е, но зато очень просто исполнять любые java-скрипты.

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

Исполнение скрипта осуществляется с помощью ExecuteJavaScript. При этом обязательно проверять, чтобы Chromium.Browser и Chromium.Browser.Mainframe были отличны от nil.

Вот как будет выглядеть заполнение и сабмит формы логина на сайте vk.com.

Изображение

Код: Выделить всё

procedure TfrmMain.btnLoginClick(SenderTObject);
var
  
CodeStr string;
begin
  
if Assigned(Chromium.Browser) and Assigned(Chromium.Browser.Mainframethen
    begin
      CodeStr 
:= 'document.forms[0].quick_email.value="UserEmail";';
      
Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr'about:blank'0);
      
CodeStr := 'document.forms[0].quick_pass.value="UserPass";';
      
Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr'about:blank'0);
      
CodeStr := 'document.forms[0].submit();';
      
Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr'about:blank'0);
    
end;
end


На практике столкнулась с необъяснимой ситуацией: если этот код попробовать запустить в Delphi 7, то Chromium.Browser.Mainframe почему-то будет равен nil (а если проверку убрать, то вываливается ошибка доступа). На каком-то форуме нашла, что это общая проблема для Семерки. В 2010 все работает отлично.


Вернуться в «Прочее»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей