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

Description: Прочии темы
Moderator: Aleksandr

LILUS M
Topic author, Старшина
Старшина
Avatar
LILUS M
Topic author, Старшина
Старшина
Posts: 136
Joined: 2 May 2013
With us: 11 years 7 months

#1by LILUS » 31 Jan 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.

Image

Code: Select all

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 все работает отлично.


Return to “Прочее”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest