如何在Delphi中执行JavaScript?

7

我正在编写一个小应用程序,在中间某个点上遇到了问题,必须执行JavaScript才能获取数据?

在我的过程中,我必须登录到某个网址,然后转到某个页面,并从中获取数据。我使用indy idhttp完成了所有这些操作,获取了所有信息,除了需要使用JavaScript获取值的一列之外。然后我尝试使用twebbowser使其为我工作,但是如何使用cookie启用webbrowser呢?

我导航到浏览器('http://mysite.com/login.php用户和密码'),好吧它已经登录了,然后我尝试访问下一个链接('http://mysite.com/link1/example.php'),但它重定向到登录页面:(

任何帮助都将不胜感激:)

2个回答

7

您现在的问题是什么?在标题中,您问如何执行JavaScript。请尝试以下操作:

uses
  MSHTML_TLB, SHDocVw, ShellAPI;

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;

示例用法:

IDoc: IHTMLDocument2;
Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc);
ExecuteScript(iDoc, 'document.login.submit()', 'JavaScript'); 

这里可以找到更多相关内容 (点击这里)。


在文本中,您询问如何使用cookies(当使用TWebBrowser时,这应该会自动发生)。当使用Indy HTTP时,您只需要将TIdCookieManager附加到TIdHTTPClient实例上即可,就是这样(但由于脚本要求,您可能不想使用它....)


2
你最好的选择是自动化IE浏览器。下载embeddedwb,将其放在一个表单中并导航到需要执行某些操作的网址。该组件有一个返回OLEVariant的属性,可以使用它来执行类似于document.form.submit;的DHTML语句。
你可以轻松隐藏用于自动化的窗口,我使用的一种技术是将其放在页面控件的新页面上,添加第二个页面以显示状态,然后显示状态页面并隐藏选项卡。

你知道这个能否在Windows服务中完成吗?还是必须是Win32应用程序? - M Schenkel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接