您的位置:首页 > 编程语言 > Delphi

Delphi自动提交网页表单和获取框架网页源码

2013-12-10 13:24 501 查看
这两个问题的实现原理其实是差不多的,所以放在一起介绍,单元MSHtml封装了我们需要的功能。

首先,新建一个DELPHI工程,在USES部分添加MSHtml单元的引用。

然后,在窗体上放置一个TWebBrowser控件和四个按钮。

最后,编写四个按钮的响应代码:

1. 自动提交网页表单

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://www.baidu.com');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  doc: IHTMLDocument2;

  oleObj: OleVariant;
begin
  doc := WebBrowser1.Document as IHTMLDocument2;

  if doc = nil then Exit;

  oleObj := doc.all.item('wd', 0) as IHTMLElement2;

  //网页有一个名为“wd”的文本框:<input type="text" name="wd"
id="kw" maxlength="100">
  oleObj.Value := 'Delphi'; //为文本框赋值
  oleObj := doc.all.item('su', 0) as IHTMLElement2;

  //网页有一个ID为“su”的按钮:<input type="submit" value="百度一下" id="su">
  oleObj.Click;  //点击按钮,提交表单
end; 

2. 获取框架网页源码

 procedure TForm1.Button3Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://含有框架的网页URL');
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  doc, framedoc: IHTMLDocument2;

  frame_dispatch: IDispatch;

  ole_index: OleVariant;

  i: Integer;
begin
  doc := WebBrowser1.Document as IHTMLDocument2;

  if doc = nil then Exit;

  for i := 0 to doc.frames.length
- 1 do

  begin
    ole_index := i;

    frame_dispatch := doc.frames.item(ole_index);

    if frame_dispatch = nil then Continue;

    framedoc := (frame_dispatch as IHTMLWindow2).document;

    if framedoc = nil then Continue;

    ShowMessage(framedoc.body.innerHTML);

  end;

end; 

3. 获取网页所有链接

procedure TForm1.Button1Click(Sender: TObject);

var

  elem: IHTMLElement;

  coll: IHTMLElementCollection;

  i: integer;

  url, title: string;

begin

  coll := (WebBrowser1.Document as IHTMLDocument2).all;

  coll := (coll.tags('a') as IHTMLElementCollection);

  for i := 0 to coll.Length - 1 do

     begin //   循环取出每个链接
      elem := (coll.item(i, 0) as IHTMLElement);

      url := Trim(string(elem.getAttribute(WideString('href'), 0)));

      title := elem.innerText;

      ShowMessage(Format('链接标题:%s,链接网址:%s', [title, url]));

     end;

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: