WebBrowser的用法

原创 2008年10月03日 11:13:00
http://hi.baidu.com/pirateflag/blog/item/c1b898243a83212ed507422b.html
 WebBrowser的用法
2008-06-18 11:22

WebBrowser是一个简单的浏览器,我们可以通过它完成很多关于网页的操作。

在Delphi中,需要引用ShDocVw和MsHtml,下面会逐渐介绍一些使用办法

创建WebBrowser

WebBrowser := TWebBrowser.Create(nil);

WebBrowser.ParentWindow := Self.Handle;
WebBrowser.Height := 100;
WebBrowser.Width := 100;

WebBrowser.Silent := true; //不会因为网页错误弹出对话框

WebBrowser.OnBeforeNavigate2 := OnNewWindow; //可屏蔽不相关的网页
WebBrowser.OnDocumentComplete := OnComplete; //流程处理的关键

打开某个页面
WerBrowser.Navigate('http://www.zixunwang.biz:8080/');

procedure   OnNewWindow(...);

begin

cancel := Pos('http://www.zixunwang.biz:8080/', URL) = 0;

//屏蔽不相关的网页,在这里会屏蔽http://www.zixunwang.biz:8080/以外的网页

end;

procedure OnComplete(...);

begin

if url = 'http://www.zixunwang.biz:8080/login.aspx' then LoginProcess();

if pos('default.aspx', url) <> 0 then defaultProcess();

end;

有的时候,我们想获取网页中的元素的信息,或是想设置网页中元素的信息,那么如下代码应该是你关心的了

以下的代码是演示设置信息,函数通过遍历网页中所有元素,将符合元素设置合适的值

procedure login;
var
Doc: IHtmlDocument2;
i: Integer;
Input: IHTMLInputElement;
Item: IDispatch;
Data: String;
begin
Doc := WebBrowser.Document as IHtmlDocument2;
Data := Doc.body.innerHTML;
for i := 0 to Doc.all.length - 1 do
begin
    Item := Doc.all.item(i, 0);
    if SUCCEEDED(Item.QueryInterface(IHTMLInputElement, Input)) then
    begin
      if Input.name = 'FSI-UserName' then Input.value := '用户名';
      if Input.name = 'FSI-Password' then Input.value := '密码';
    end;
end;
end;

问题1:'FSI-UserName'和'FSI-Password'是怎么得到的?

解答1:你可以通过查看网页原文件获得这些ID,这些ID都是唯一的

问题2:IHTMLInputElement是什么东西?

解答2:IHTMLInputElement是一个系统定义的接口,在网页中的所有元素,如button,textarea,select, frame,image等都定义有接口,选择合适的接口类型对网页元素进行转换,就可以得到该元素详细的值,具体请参看MSHTML中的定义或给我留言

有的网页内有frame或iframe,我们如何取到其中的信息?

//取得frame个数

function GetFrameCount: Integer;

var

Doc: IHTMLDocument2;

begin

   Doc := WerBrowser.Document as IHTMLDocument2;

Result := Doc.Frame.Length;

end;

//取得第n个frame内容

function GetFrameDoc(n: Integer);

var

Doc: IHTMLDocument2;

OleContainer: IOleContainer;
enum: IEnumUnknown;
unk: IUnknown;
Fetched: PLongint;

begin

   Doc := WebBrowser.Document as IHTMLDocument2;
   Fetched := nil;
   OleContainer:= Doc as IOleContainer;
   OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, enum);
   Enum.Skip(n);
   Enum.Next(OLECONTF_EMBEDDINGS, Unk, Fetched);
   IE := Unk as IWebbrowser2;
   return IE.Document as IHTMLDocument2;

end;

你说的都是在自己创建的WebBrowser中进行操作,能否在已经打开的浏览器中进行呢?

这个问题其实分2步,第1是找到你关注的浏览器窗口,第2是把这个窗口转换为IWebBrowser2

function getIEFromBrowser(URL: String): IWebBrowser2;

var

ShellWindow: IShellWindows;
nCount, i: integer;

vi: OleVariant;
spDisp: IDispatch;
begin

ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;
for i := 0 to nCount - 1 do
begin
    vi := i;
    spDisp := ShellWindow.Item(vi);
    if (spDisp = nil) then Continue;
    spDisp.QueryInterface(iWebBrowser2, Result);
    if (Result = nil) then Continue;
    if Pos(UpperCase(URL), UpperCase(Result.Get_LocationURL)) = 0 then Continue;

    exit;

end;

result := nil;

end;


类别:twebbrowser模拟鼠标点击 | 添加到搜藏 | 浏览(80) | 评论 (0)
 
上一篇:post cookie提交    下一篇://一个QQ号码申请程序
 

c#中WebBrowser控件的使用方法

首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的。如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第...
  • gshengod
  • gshengod
  • 2013年07月29日 16:03
  • 11582

WebBrowser控件默认使用IE9,IE10的方法

WebBrowser控件默认使用IE9,IE10的方法 最近为了抓取淘宝的成交数据,用C#的WebBrowser控件开发了一个简单的程序. 发现WebBrowser控件默认使用的版本...
  • chenlei_525
  • chenlei_525
  • 2013年05月28日 14:02
  • 2090

WPF中WebBrowser的使用方法及分析

基础知识WebBrowser类 承载并在HTML文档间导航。在WPF托管代码和HTML脚本间启用互操作性。 WebBrowser.Navigate方法(Uri) 异步导航到位于指定Uri处的文档...
  • wangshubo1989
  • wangshubo1989
  • 2015年08月07日 15:51
  • 22049

WebBrowser用法总结

简单用了一下记录一下: private void button1_Click(object sender, EventArgs e) {     MessageBox.Show(webB...
  • tery001
  • tery001
  • 2014年10月10日 11:43
  • 880

WebBrowser用法总结

简单用了一下记录一下: private void button1_Click(object sender, EventArgs e) {     MessageBox.Show(webBro...
  • fwj380891124
  • fwj380891124
  • 2011年11月10日 10:40
  • 2863

C# Webbrowser使用加载页面多少了内存泄露问题解决方法汇总

[C#]有关WebBrowser内存使用增加问题     在Windows程序开发中,使用了Webbrowser 控件,陆续发觉该控制存在着不少的问题,当中最严重的是他胃口太好太大,每load一...
  • MYsce
  • MYsce
  • 2018年01月09日 23:25
  • 22

关于WebBrowser控制新窗口[_blanck]问题解决总结

当页面为新窗口弹出时,下面代码分别演示如何在新建form中加载页面以及当前form的web控件加载form。 SHDocVw微软的一个系统文件,文件路径:C:\WINDOWS\system32\sh...
  • limfungsuen
  • limfungsuen
  • 2011年08月24日 09:45
  • 715

webBrowser实现自动填写登录并在跳转页面实现签到

实验室要每天签到,所以用webBrowser写了一个一键签到的小程序,期间遇到些很有价值的问题,最大的收获就是对navigated事件 和  DocumentCompleted事件的了解。 pr...
  • sdsxtianshi
  • sdsxtianshi
  • 2014年09月18日 18:26
  • 301

如何对webbrowser和IE编程(五)

自动化 Internet Explorer 自动化打开了开发基于web应用的世界。 它允许你使用VB或者VC定制成熟的应用。自动化的好处:通过属性和方法可以改变IE的外观;你可以提供诸如导航条等用户...
  • fakine
  • fakine
  • 2013年08月27日 16:00
  • 658

C# winform webBrowser如何自动登录?

背景说明:现在我们公司在使用海南省社保局的接口,接口通过VPN调用。可是VPN是有时间限制的,所有就有这样的需求,开发的程序可以过一段时间自动连接VPN。不要每天都通过人去连接。在网上找了些相关信息。...
  • hnliwh
  • hnliwh
  • 2011年11月16日 15:53
  • 1249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WebBrowser的用法
举报原因:
原因补充:

(最多只允许输入30个字)