Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как выполнить JavaScript функцию

Delphi , Интернет и Сети , Браузер

Как выполнить JavaScript функцию

Автор: http://www.swissdelphicenter.ch

uses
  MSHTML_TLB, SHDocVw, ShellAPI;

// function to execute a script function

function ExecuteScript(doc: IHTMLDocument2; script: string; language: string):
  Boolean;
var
  win: IHTMLWindow2;
  Olelanguage: Olevariant;
begin
  if doc <> nil then
  begin
    try
      win := doc.parentWindow;
      if win <> nil then
      begin
        try
          Olelanguage := language;
          win.ExecScript(script, Olelanguage);
        finally
          win := nil;
        end;
      end;
    finally
      doc := nil;
    end;
  end;
end;

// 2 Examples how to login to gmx homepage

procedure FillInGMXForms(WB: ShDocVW_TLB.IWebbrowser2; IDoc1: IHTMLDocument2;
  Document: Variant; AKennung, APasswort: string);
const
  IEFields: array[1..4] of string = ('INPUT', 'text', 'INPUT', 'password');
var
  IEFieldsCounter: Integer;
  i: Integer;
  m: Integer;
  ovElements: OleVariant;
begin
  if Pos('GMX - Homepage', Document.Title) <> 0 then

    while WB.ReadyState <> READYSTATE_COMPLETE do
      Application.ProcessMessages;

  // count forms on document and iterate through its forms
  IEFieldsCounter := 0;
  for m := 0 to Document.forms.Length - 1 do
  begin
    ovElements := Document.forms.Item(m).elements;

    // iterate through elements
    for i := ovElements.Length - 1 downto 0 do
    begin
      try
        // if input fields found, try to fill them out
        if (ovElements.item(i).tagName = IEFields[1]) and
          (ovElements.item(i).type = IEFields[2]) then
        begin
          ovElements.item(i).Value := AKennung;
          Inc(IEFieldsCounter);
        end;

        if (ovElements.item(i).tagName = IEFields[3]) and
          (ovElements.item(i).type = IEFields[4]) then
        begin
          ovElements.item(i).Value := APasswort;
          Inc(IEFieldsCounter);
        end;
      except
        // failed...
      end;
    end; { for i...}
  end; { for m }
  // if the fields are filled in, submit.
  if IEFieldsCounter = 3 then
    ExecuteScript(iDoc1, 'document.login.submit()',
      'JavaScript');
end;

function LoginGMX_IE(AKennung, APasswort: string): Boolean;
var
  ShellWindow: IShellWindows;
  WB: ShDocVW_TLB.IWebbrowser2;
  spDisp: IDispatch;
  IDoc1: IHTMLDocument2;
  Document: Variant;
  k: 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 ShDocVW_TLB.IWebbrowser2;
        Document := WB.Document;
        // if GMX page...
        FillInGMXForms(WB, IDoc1, Document, AKennung, APasswort);
      end; { idoc <> nil }
    end; { wb <> nil }
  end; { for k }
end;

// Example 1: Navigate to the gmx homepage in the IE browser an login

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Handle,
    'open',
    'http://www.gmx.ch',
    nil,
    nil,
    SW_SHOW);
  Sleep(2000);
  LoginGMX_IE('user@gmx.net', 'pswd');
end;

// Example 2: navigate to the gmx homepage in the Webbrowser an login

procedure TForm1.Button2Click(Sender: TObject);
var
  IDoc1: IHTMLDocument2;
  Web: ShDocVW_TLB.IWebBrowser2;
begin
  Webbrowser1.Navigate('http://www.gmx.ch');
  while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
  Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);
  Web := WebBrowser1.ControlInterface;
  FillInGMXForms(Web, iDoc1, Webbrowser1.Document, 'user@gmx.net', 'pswd');
end;

Привет! Я перевёл текст на русский язык:

Код, предоставленный в Delphi, использует компоненты COM для взаимодействия с Internet Explorer (IE). Основные функции: 1. ExecuteScript: эта функция выполняет скрипт JavaScript в документе HTML. 2. FillInGMXForms: это процедура заполняет форму входа на домашней странице GMX, поисковаясь за конкретными полем ввода и устанавливая их значения. 3. LoginGMX_IE: эта функция логинится на веб-сайте GMX с помощью IE.

Код включает два примера: Пример 1: он навигирует на домашнюю страницу GMX с помощью функции ShellExecute, подождет, пока страница не загрузится, и затем вызовет функцию LoginGMX_IE для входа. Пример 2: он использует компонент TWebBrowser для навигации на домашнюю страницу GMX, подождет, пока страница не загрузится, и затем заполнит форму входа с помощью процедуры FillInGMXForms.

Чтобы преобразовать этот код в JavaScript, вам нужно переписать логику для использования JavaScript вместо Delphi. Вот пример, как можно достичь аналогичного функционала в JavaScript:

// Выполнение скрипт-функции
function executeScript(doc, script, language) {
  if (doc && doc.parentWindow) {
    try {
      const win = doc.parentWindow;
      if (win) {
        try {
          win.execScript(script, language);
        } finally {
          win = null;
        }
      }
    } finally {
      doc = null;
    }
  }
}

// Заполнение форм GMX
function fillInGMXForms(doc, AKennung, APasswort) {
  if (doc.title.includes('GMX - Homepage')) {
    const inputFields = doc.querySelectorAll('input');
    for (const inputField of inputFields) {
      if (inputField.type === 'text') {
        inputField.value = AKennung;
      } else if (inputField.type === 'password') {
        inputField.value = APasswort;
      }
    }
  }
}

// Вход на GMX
function loginGMX(AKennung, APasswort) {
  const gmxPage = document.querySelector('GMX - Homepage');
  if (gmxPage) {
    fillInGMXForms(gmxPage, AKennung, APasswort);
    executeScript(gmxPage, 'document.login.submit()', 'JavaScript');
  }
}

// Пример использования
loginGMX('user@gmx.net', 'pswd');

Обратите внимание, что это JavaScript-код предполагает аналогичную структуру HTML к Delphi-коду и может требовать модификаций для работы с вашим конкретным использованием. Кроме того, использование execScript в целом не рекомендуется, поскольку это устаревший метод; вместо этого вы можете использовать функцию eval или более современный подход,such as using a library like jQuery to interact with the page.

В статье описывается выполнение JavaScript-функции в Delphi с помощью компонента MSHTML и интерфейса IHTMLWindow2.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 16:17:41/0.004133939743042/0