• 用MSHTML控制网页中所有元素(delphi代码)


    前些日子用VS2005中的WebBrowser来控制网页中的元素,虽然VS2005封装了很多不错的功能,但用起来总觉得有所欠缺。比如我想如得到框架页内网页的源码,找来的去,就是找不到合适的方法。
            MSHTML是微软公司的一个COM组件,该组件封装了HTML语言中的所有元素及其属性,通过其提供的标准接口,可以访问指定网页的所有元素.MSHTML对象模型是由一些对象和集合组成的.处于根部的是HTML,描述了打开页面的1个窗口,包括一系列集合和对象。如Frames集合,History,Location,Navigator,Document,Vi—sum,Event对象等.其中描述呈现在客户窗口实际网页的是Document对象。由一系列的属性、方法、对象和集合组成.其中All集合中包含网页中所有标记(Tag)元素,其主要的方法和属性有:
      (1)Length(长度):即标记出现的个数,可以把标记的集合理解为从0开始的一维数组,其次序按照标记在网页位置排列;
      (2)Tags(标记):用于过滤出给定标记的集合,如Doc.Al1.Tags(P)得到所有分段标记P;
      (3)Item(项目):用于选择集合中的某1个元素,如object.item(0)得到集合的第1个元素,而object.item(i)得到第i+1个元素.
    此外,IHTMLElement也是个常用的集合对象,代表网页中指定标记的集合,通过这个集合对象,可以得到网页上特定标记的内容.IHTMLElement有4个主要属性:
      (1)InnerText:开始标记和结束标记之间的文本;
      (2)InnerHTML:开始标记和结束标记之间的文本和HTML;
      (3)OuterText:对象的文本;
      (4)OuterHTML:对象的文本和HTML.
    自动提交

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Doc:IHTMLDocument2;
    input:OleVariant;
    userinputelement,pwdinputelement:ihtmlinputelement;
    begin
    doc:=webbrowser1.document as ihtmldocument2;
    userinputelement:=(doc.all.item('user'(也就是网页中用户名控件的名字),0) as ihtmlinputelement);
    userinputelement.value:=edit1.text;(也就是你要向网页输入的东西)
    pwdinputelement:=(doc.all.item('password',0) as ihtmlinputelement);
    pwdinputelement.value:=edit2.text;
    input:=doc.all.item('submit',0);
    input.click;
    end; 

      当提交数据按钮没有NAME属性时,采用如下方法:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Doc:IHTMLDocument2;
    form:ithmlformelement;
    userinputelement,pwdinputelement:ihtmlinputelement;

    begin
    doc:=webbrowser1.document as ihtmldocument2;
    userinputelement:=(doc.all.item('user'(也就是网页中用户名控件的名字),0) as ihtmlinputelement);
    userinputelement.value:=edit1.text;(也就是你要向网页输入的东西)
    pwdinputelement:=(doc.all.item('password',0) as ihtmlinputelement);
    pwdinputelement:=edit2.text;
    form:=(doc.all.item('login_form',0) as ihtmlformelement):
    form.submit;
    end; 


    当前页为框架页时,采用如下方法:

    procedure TForm1.Button1Click(Sender: TObject);
    var
        doc2:IHTMLDocument2;
        o : Olevariant;
        ole_index: OleVariant;
        frame_dispatch: IDispatch;
        frame_win: IHTMLWindow2;
        frame_doc: IHTMLDocument2;
    begin
      begin
          doc2 := WebBrowser1.Document as IHTMLDocument2;
          ole_index:=0;
          frame_dispatch := doc2.Frames.Item(ole_index);
          if frame_dispatch <> nil then
          begin
              frame_win := frame_dispatch as IHTMLWindow2;
              frame_doc := frame_win.document;
             // memo1.lines.add(IHTMLDocument2(frame_doc).body.outerHTML);
          End;
    end; 
  • 相关阅读:
    Linux下安装maven
    非连续性及反脆弱
    高手是怎么练成的
    思维型大脑
    编写文档五轮模式
    Nginx初识
    ida快捷键
    ida+gdb调试任意平台
    gcc常用命令使用
    ida调试ios应用
  • 原文地址:https://www.cnblogs.com/yuanbao/p/878213.html
Copyright © 2020-2023  润新知