Опишу самый простой способ заполнения и отправки формы с использованием компонента TChromium. С доступом к DOM-элементам по id в нем дела обстоят не так хорошо, как в Webbrowser-е, но зато очень просто исполнять любые java-скрипты.
JavaScript может пригодится не только для заполнения форм, он вообще достаточно широко используется.
Исполнение скрипта осуществляется с помощью ExecuteJavaScript. При этом обязательно проверять, чтобы Chromium.Browser и Chromium.Browser.Mainframe были отличны от nil.
Вот как будет выглядеть заполнение и сабмит формы логина на сайте vk.com.
Code: Select all
procedure TfrmMain.btnLoginClick(Sender: TObject);
var
CodeStr : string;
begin
if Assigned(Chromium.Browser) and Assigned(Chromium.Browser.Mainframe) then
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 все работает отлично.