• Delphi中WebBrowser自动填表模板


    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,MSHTML, SHDOCVW,IdGlobal;
    type
      TMainFrm = class(TForm)
        btnTest: TButton;
        edURL: TEdit;
        Label1: TLabel;
        procedure btnTestClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      MainFrm: TMainFrm;
    implementation
    {$R *.dfm}
    procedure FillIEForm(aURL:string);
      procedure DoWithHtmlElement(aElementCollection:IHTMLElementCollection);
      var
        k:integer;
        vk:oleVariant;
        Dispatch: IDispatch;
        HTMLInputElement:IHTMLInputElement;
        HTMLSelectElement:IHTMLSelectElement;
        HTMLOptionElement: IHTMLOptionElement;
        HTMLTextAreaElement: IHTMLTextAreaElement;
        HTMLFormElement:IHTMLFormElement;
        HTMLOptionButtonElement:IHTMLOptionButtonElement;
      begin
        for k:=0 to aElementCollection.length -1 do
        begin
          Vk:=k;
          Application.ProcessMessages;
          Dispatch:=aElementCollection.item(Vk,0);
          if Succeeded(Dispatch.QueryInterface(IHTMLInputElement,HTMLInputElement)) then
          begin
            With HTMLInputElement do//单行文本
            begin
              if (UpperCase(Type_)='TEXT') or (UpperCase(Type_)='PASSWORD') then
              begin
                value:='text';
              end
              else if (UpperCase(Type_)='CHECKBOX') then//复选框
              begin
                checked:=true;
              end
              else if (UpperCase(Type_)='RADIO') then//单选框
              begin
                checked :=true;
              end;
            end;
          end
          else if Succeeded(Dispatch.QueryInterface(IHTMLSelectElement,HTMLSelectElement)) then
          begin
            With HTMLSelectElement do//下拉框
            begin
              selectedIndex :=1;
            end;
          end
          else if Succeeded(Dispatch.QueryInterface(IHTMLTEXTAreaElement,HTMLTextAreaElement)) then
          begin
            with HTMLTextAreaElement do//多行文本
            begin
              value :='textarea';
            end;
          end
          else if Succeeded(Dispatch.QueryInterface(IHTMLOptionElement,HTMLOptionElement)) then
          begin
            with HTMLOptionElement do//下拉选项
            begin
              //处理
            end;
          end
          else if SUCCEEDED(Dispatch.QueryInterface(IHTMLFormElement,HTMLFormElement))then
          begin
            with HTMLFormElement do//表单
            begin
              //处理
            end;
          end
          else if SUCCEEDED(Dispatch.QueryInterface(IHTMLOptionButtonElement,HTMLOptionButtonElement))then
          begin
            //不明
            //处理
          end
          else
            //showmessage('other');
            ;
        end;
      end;
    var
      ShellWindow: IShellWindows;
      Web: IWebBrowser2;
      Dispatch: IDispatch;
      i,j:integer;
      IEAddress:string;
      HTMLDocument:IHTMLDocument2;
      ElementCollection:IHTMLElementCollection;
      FrameWindow:IHTMLWindow2;
      Vi,Vj:OLEVariant;
      HTMLFrameBase :IHTMLFrameBase ;
      HTMLFrameElement:IHTMLFrameElement ;
      HTMLIFrameElement:IHTMLIFrameElement;
    begin
      ShellWindow := CoShellWindows.Create;
      for i:=0 to ShellWindow.Count -1 do
      begin
        Vi:=i;
        Dispatch:=ShellWindow.Item(Vi);
        if Dispatch=nil then continue;
        Dispatch.QueryInterface(IWebBrowser2,Web);
        if Web<>nil then
        begin
          IEAddress:=Web.LocationURL;
          if Pos(aURL,IEAddress)>0 then
          begin
            Web.Document.QueryInterface(IHTMLDocument2,HTMLDocument);
            if HTMLDocument<>nil then
            begin
              if HTMLDocument.frames.length =0 then//无框架
              begin
                ElementCollection:=HTMLDocument.Get_All;
                DoWithHtmlElement(ElementCollection);
              end
             else//有框架
              begin
                for j:=0 to HTMLDocument.frames.length -1 do
                begin
                  Vj:=j;
                  Dispatch:=HTMLDocument.frames.item(Vj);
    //              if Succeeded(Dispatch.QueryInterface(IHTMLFrameBase,HTMLFrameBase)
                  if Succeeded(Dispatch.QueryInterface(IHTMLWindow2,FrameWindow)) then
                  begin
    //                DoWithHtmlElement(FrameWindow.document.all);
                  end;
                End;
              end;
            end;
          end;
        End;
      end;
    end;
    procedure TMainFrm.btnTestClick(Sender: TObject);
    begin
      FillIEForm(edUrl.Text);
    end;
    end.

    http://blog.csdn.net/iseekcode/article/details/4708400

  • 相关阅读:
    Chrome禁用缓存
    国内阿里Maven仓库镜像Maven配置文件Maven仓库速度快
    spring boot 之热部署
    Spring Boot的Maven插件Spring Boot Maven plugin详解
    在Extjs 的 TabPanel在 title标题栏上加按扭button
    Entity Framework 基于Oracle的code first 问题汇总
    面向对象设计原则
    Asp.Net MVC 缓存设计
    Asp.Net MVC 身份认证
    Asp.Net MVC 请求原理分析
  • 原文地址:https://www.cnblogs.com/findumars/p/5288438.html
Copyright © 2020-2023  润新知