2023年11月25日发(作者:)

C#WebBrowser操作frame如此简单

刚学c#不久,也不太懂什么IHTMLDocumentIHTMLDocument2IWebBrowser2等等。自己琢磨

了好久,终于知道了怎么用WebBrowser操作frameiframe

1.获取frame的源文件

(es["main"].

Html);

2.获取frameHTMLDocument接口

HTMLDocument doc = (HTMLDocument)ument;

object j;

for (int i = 0; i < ; i++)

{

j = i;

HTMLWindow2Class frame = (ref j) as

HTMLWindow2Class;

if ( == "main")

{

();

}

}

3.获取frameIHTMLDocument2接口

IHTMLDocument2 doc =

(IHTMLDocument2)["main"].u

ment;

4.取得frame中被点击的连接

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)

{

string url =

["main"].ribute("s

rc");

}

原文:/llj1985/archive/2007/09/01/

C# 通过webBrowser 框架网页

2009-11-16 08:53

首先对webBrowser加载网页

this.= new ("url地址", te);

给一般不是框架网页中的文本框赋值

mentById("文本框ID").InnerText= "weiling";//文本框赋值根据

ID赋值

或者:["文本框name"].SetAttribute("value", "0924");//文本框赋

值根据name赋值

表单提交,也可以看成是一个点击事件

HtmlElement form= mentById("formID");//提交表单

Member("submit");

框架网页中的文本框赋值,"frameMain"是框架的na

me

["frameMain"].mentById("txtXingming

").InnerText= "521656";//框架

赋值

:frameMain 是框架的name

框架网页中下拉框

赋值

HtmlDocument doc= ["frameMain"].Document;//框架下

下拉框赋值

HtmlElement el= mentById("drpXingbie");

ribute("selectedIndex","1");

网页控件没有ID时的操作

C#:webBrowser1控件通过TagName,Name查找元素(没有ID)

//防止页面多次刷新页面执行

if (num == 1)

{

string GetUserName =

string GetUserPassword =

int a = 1;

int all = ;

for (int i = 0; i < all; i++)

{

HtmlElement GetElement = [i];

//取到包含input标签的元素

if (GetElement.TagName.ToUpper().ToString() == "INPUT")

{

//根据inputName属性,找到该元素并赋值:给用户名输入框赋值

if (ng() == "UserName")

tings["Y2000UserName"].ToString();

tings["Y2000UserPassword"].ToString();

{

[i].SetAttribute("value",

GetUserName);

}

//根据inputName属性,找到该元素并赋值:给密码输入框赋值

if (ng() == "Passwd")

{

[i].SetAttribute("value",

GetUserPassword);

}

}

//根据inputName属性,找到提交按钮并执行动作

if (ng() == "Submit")

{

//过滤点击页面中相同"name=Submit"的元素

if (a == 1)

{

[i].InvokeMember("click");

}

a++;

}

}

num++;

}

C# WebBrowser实现网页自动填表

2010-02-01 16:20

C# WebBrowser实现网页自动填表

曾今向网友介绍过我的一个自己编写的自动填写网页表单的小程序,很多网友都觉得很实用,

也许多会对这个程序的源码很感兴趣,这里我只是简介下程序中用到的主要代码。最初我是

通过下面这篇文章渐渐积累的相关知识,再慢慢完善,现转来同大家分享,共同学习。

话说有了WebBrowser类,终于不用自己手动封装SHDocVwAxWebBrowser这个ActiveX

控件了。这个类如果仅仅作为一个和IE一模一样浏览器,那就太没意思了(还不如直接用IE

呢)那么,无论我们是想做一个定制版IE”还是希望利用HTML来做用户界面(指WinApp

而非WebApp。许多单机软件,包括Windows的帮助支持中心,都是HTML做的),都少不

Windows Form和包含在WebBrowser中的Web页面的交互。本文将通过几个实际的例子,

初步介绍一下WinFormWebBrowser所包含的Web页面之间的交互。

Windows FormWebBrowser

“webBrowser”

Study Case 1:用WinFormEvent Handler响应Web页面的事件

现在有这样一个Windows Application,它的界面上只有一个WebBrowser,显示一个本地的

HTML文件作为界面。现在的问题是,所有逻辑都可以放在HTML文件里,唯独关闭按钮

遇到了困难——通常,Web页面是没有办法直接控制浏览器的,更不用说结束这个WinForm

程序了。

但是,在.Net 2.0当中,Windows Form响应Web页面的事件已经成为了现实。

.Net 2.0中,整个HTML文档以及其包含的各个HTML元素,都和一个个HtmlDocument

HtmlElement之类的.Net对象对应。因此只要找到这个关闭按钮对应的HtmlElement对象,

为其click事件添加Event Handler即可。

假设HTML源代码如下:

那么找出该按钮并为之添加Event Handler的代码如下:

HtmlDocument htmlDoc = nt;

HtmlElement btnElement = ["btnClose"];

if (btnElement != null)

{

+= new HtmlElementEventHandler(HtmlBtnClose_Click);

}

其中HtmlBtnClose_Click是按下Web按钮时的Event Handler

很简单吧?那么稍稍高级一点的——我们都知道一个HTML元素可能有很多各种各样的事

件,而HtmlElement这个类只给出最常用、共通的几个。那么,如何响应其他事件呢?这也

很简单,只需要调用HtmlElementAttachEventHandler就可以了:

EventHandler("onclick", new EventHandler(HtmlBtnClose_Click));

// += new

HtmlElementEventHandler(HtmlBtnClose_Click);

对于其他事件,把"onclick"换成该事件的名字就可以了。例如:

EventHandler("onsubmit", new EventHandler(HtmlForm_Submit));

Study Case 2:表单(form)的自动填写和提交

要使我们的WebBrowser具有自动填表、甚至自动提交的功能,并不困难。

假设有一个最简单的登录页面,输入用户名密码,点登录按钮即可登录。已知用户名输入

框的id(或Name,下同)是username,密码输入框的idpassword登录按钮的id

submitbutton,那么我们只需要在webBrowserDocumentCompleted事件中使用下面的代码

即可:

HtmlElement btnSubmit = ["submitbutton"];

HtmlElement tbUserid = ["username"];

HtmlElement tbPasswd = ["password"];

if (tbUserid == null || tbPasswd == null || btnSubmit == null)

return;

ribute("value", "smalldust");

ribute("value", "12345678");

Member("click");

这里我们用SetAttribute来设置文本框的“value”属性,InvokeMember来调用了按钮的“click”

方法。因为不同的Html元素,其拥有的属性和方法也不尽相同,所以.Net 2.0提供了统一的

HtmlElement来概括各种Html元素的同时,提供了这两个方法以调用元素特有的功能。关于

各种Html元素的属性和方法一览,可以查阅MSDNDHTML Reference

关于表单的提交,的确还有另一种方法就是获取form元素而不是button并用form元素的

submit方法:

HtmlElement formLogin = ["loginForm"];

//……

Member("submit");

本文之所以没有推荐这种方法,是因为现在的网页,很多都在submit按钮上添加onclick

件,以对提交的内容做最基本的验证。如果直接使用formsubmit方法,这些验证代码就

得不到执行,有可能会引起错误。

Study Case 3:查找并选择文本

这次我们希望实现一个和IE一模一样的查找功能,以对Web页面内的文字进行查找。

文本查找要借助于TextRange对象的findText方法。但是,.Net里并没有这个对象。这是因

为,.Net 2.0提供的HtmlDocumentHtmlWindowHtmlElement等类,只不过是对原有mshtml

这个COM组件的不完整封装,只提供了mshtml的部分功能。所以许多时候,我们仍旧要借

mshtml来实现我们需要的功能。好在这些.Net类都提供了DomDocument这个属性,使得

我们很容易把.Net对象转换为COM对象使用。下面的代码演示了如何查找Web页面的文本。

(需要添加mshtml的引用,并加上using mshtml;

public partial class SearchDemo : Form

{

// 建立一个查找用的TextRangeIHTMLTxtRange接口)

private IHTMLTxtRange searchRange = null;

public SearchDemo()

{

InitializeComponent();

}

private void btnSearch_Click(object sender, EventArgs e)

{

// DocumentDomDocument属性,就是该对象内部的COM对象。

IHTMLDocument2 document = (IHTMLDocument2)ument;

string keyword = ();

if (keyword == "")

return;

// IE的查找逻辑就是,如果有选区,就从当前选区开头+1字符处开始查找;没有的话就从页

面最初开始查找。

// 这个逻辑其实是有点不大恰当的,我们这里不用管,和IE一致即可。

if (r() != "none")

{

searchRange = (IHTMLTxtRange)Range();

se(true);

art("character", 1);

}

else

{

IHTMLBodyElement body = (IHTMLBodyElement);

searchRange = (IHTMLTxtRange)TextRange();

}