HttpWebRequest post 提交 C#的WebBrowser操作frame如此简单 WebClient 提交

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

//<a href="http://www.cnblogs.com/cgli/archive/2011/04/09/2010497.html">http://www.cnblogs.com/cgli/archive/2011/04/09/2010497.html</a> <br>System.Net.ServicePointManager.Expect100Continue = false;

            string
param = "u=1159924411&p=zwl.303815";//分别是用户名框的id和密码的id

            byte[] bs = Encoding.ASCII.GetBytes(param);

            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://qzone.qq.com/");

            req.Method = "POST";

            req.ContentType = "application/x-www-form-urlencoded";

            req.ContentLength = bs.Length;

            using
(Stream reqStream = req.GetRequestStream())

            {

                reqStream.Write(bs, 0, bs.Length);

            }

            using
(WebResponse wr = req.GetResponse())

            {

               

                StreamReader sr = new
StreamReader(wr.GetResponseStream());

                string
str = sr.ReadToEnd();

//引用HtmlAgilityPack.dll<br>                HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument();

                 html.LoadHtml(str);

                 

               // HtmlDocument doc = new HtmlDocument();

              //  doc.Write("<html><title>test</title><body>this is a hteml</body></html>");

                //string str=wr.

                //在这里对接收到的页面内容进行处理

          

  

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

C#的WebBrowser操作frame如此简单

刚学c#不久,也不太懂什么IHTMLDocument、IHTMLDocument2、IWebBrowser2等等。自己琢磨了好久,终于知道了怎么用WebBrowser操作frame和iframe。

1.获取frame的源文件

MessageBox.Show(webBrowser1.Document.Window.Frames["main"].Document.Body.InnerHtml);

2.获取frame的HTMLDocument接口

HTMLDocument doc = (HTMLDocument)webBrowser1.Document.DomDocument;

object
j;

for (int
i = 0; i < doc.parentWindow.frames.length; i++)

{

      j = i;

      HTMLWindow2Class frame = doc.parentWindow.frames.item(ref
j) as
HTMLWindow2Class;

      if
(frame.name == "main")

       {                  

             MessageBox.Show(frame.document.title);                   

       }

}   

3.获取frame的IHTMLDocument2接口

IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.Window.Frames["main"].Document.DomDocument;

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

private
void webBrowser1_Navigating(object
sender, WebBrowserNavigatingEventArgs e)

{

     string
url = webBrowser1.Document.Window.Frames["main"].Document.ActiveElement.GetAttribute("src");

}

 

 

原文:http://blog.csdn.net/llj1985/archive/2007/09/01/1768147.aspx

C# 通过webBrowser 框架网页

2009-11-16 08:53

首先对webBrowser加载网页

this.webBrowser1.Url= new
System.Uri("url地址", System.UriKind.Absolute);

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

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

或者:this.webBrowser1.Document.All["文本框name"].SetAttribute("value", "0924");//文本框赋值根据name赋值

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

HtmlElement form= webBrowser1.Document.GetElementById("formID");//提交表单

form.InvokeMember("submit");

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

webBrowser1.Document.Window.Frames["frameMain"].Document.GetElementById("txtXingming").InnerText= "521656";//框架赋值

注:frameMain 是框架的name

框架网页中下拉框赋值

HtmlDocument doc= webBrowser1.Document.Window.Frames["frameMain"].Document;//框架下下拉框赋值

HtmlElement el= doc.GetElementById("drpXingbie");

el.SetAttribute("selectedIndex","1");

网页控件没有ID时的操作

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

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

            if
(num == 1)

            {

                string
GetUserName = System.Configuration.ConfigurationSettings.AppSettings["Y2000UserName"].ToString();

                string
GetUserPassword = System.Configuration.ConfigurationSettings.AppSettings["Y2000UserPassword"].ToString();

                int
a = 1;

                int
all = webBrowser1.Document.Body.All.Count;

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

                {

                    HtmlElement GetElement = webBrowser1.Document.All[i];

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

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

                    {

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

                        if
(GetElement.Name.ToString() == "UserName")

                        {

                            webBrowser1.Document.All[i].SetAttribute("value", GetUserName);

                        }

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

                        if
(GetElement.Name.ToString() == "Passwd")

                        {

                            webBrowser1.Document.All[i].SetAttribute("value", GetUserPassword);

                        }

                    }

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

                    if
(GetElement.Name.ToString() == "Submit")

                    {

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

                        if
(a == 1)

                        {

                            webBrowser1.Document.All[i].InvokeMember("click");

                        }

                        a++;

                    }

                }

                num++;

            }

C# WebBrowser实现网页自动填表

2010-02-01 16:20

C# WebBrowser实现网页自动填表

曾今向网友介绍过我的一个自己编写的自动填写网页表单的小程序,很多网友都觉得很实用,也许多会对这个程序的源码很感兴趣,这里我只是简介下程序中用到的主要代码。最初我是通过下面这篇文章渐渐积累的相关知识,再慢慢完善,现转来同大家分享,共同学习。

话说有了WebBrowser类,终于不用自己手动封装SHDocVw的AxWebBrowser这个ActiveX控件了。这个类如果仅仅作为一个和IE一模一样浏览器,那就太没意思了(还不如直接用IE呢)。那么,无论我们是想做一个“定制版IE”,还是希望利用HTML来做用户界面(指WinApp而非WebApp。许多单机软件,包括Windows的帮助支持中心,都是HTML做的),都少不了Windows Form和包含在WebBrowser中的Web页面的交互。本文将通过几个实际的例子,初步介绍一下WinForm和WebBrowser所包含的Web页面之间的交互。

下面的代码假设你已经建立了一个Windows Form,上面有一个WebBrowser名为“webBrowser”。

Study Case 1:用WinForm的Event 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源代码如下:

<html>

<body>

<input type="button"
id="btnClose"
value="关闭"
/>

</body>

</html>

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

HtmlDocument htmlDoc = webBrowser.Document;

HtmlElement btnElement = htmlDoc.All["btnClose"];

if
(btnElement != null)

{

btnElement.click += new
HtmlElementEventHandler(HtmlBtnClose_Click);

}

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

很简单吧?那么稍稍高级一点的——我们都知道一个HTML元素可能有很多各种各样的事件,而HtmlElement这个类只给出最常用、共通的几个。那么,如何响应其他事件呢?这也很简单,只需要调用HtmlElement的AttachEventHandler就可以了:

btnElement.AttachEventHandler("onclick", new
EventHandler(HtmlBtnClose_Click));

//这一句等价于上面的btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);

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

formElement.AttachEventHandler("onsubmit", new
EventHandler(HtmlForm_Submit));

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

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

假设有一个最简单的登录页面,输入用户名密码,点“登录”按钮即可登录。已知用户名输入框的id(或Name,下同)是username,密码输入框的id是password,“登录”按钮的id是submitbutton,那么我们只需要在webBrowser的DocumentCompleted事件中使用下面的代码即可:

HtmlElement btnSubmit = webBrowser.Document.All["submitbutton"];

HtmlElement tbUserid = webBrowser.Document.All["username"];

HtmlElement tbPasswd = webBrowser.Document.All["password"];

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

return;

tbUserid.SetAttribute("value", "smalldust");

tbPasswd.SetAttribute("value", "12345678");

btnSubmit.InvokeMember("click");

这里我们用SetAttribute来设置文本框的“value”属性,用InvokeMember来调用了按钮的“click”方法。因为不同的Html元素,其拥有的属性和方法也不尽相同,所以.Net 2.0提供了统一的HtmlElement来概括各种Html元素的同时,提供了这两个方法以调用元素特有的功能。关于各种Html元素的属性和方法一览,可以查阅MSDN的DHTML Reference。

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

HtmlElement formLogin = webBrowser.Document.Forms["loginForm"];

//……

formLogin.InvokeMember("submit");

本文之所以没有推荐这种方法,是因为现在的网页,很多都在submit按钮上添加onclick事件,以对提交的内容做最基本的验证。如果直接使用form的submit方法,这些验证代码就得不到执行,有可能会引起错误。

Study Case 3:查找并选择文本

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

文本查找要借助于TextRange对象的findText方法。但是,.Net里并没有这个对象。这是因为,.Net 2.0提供的HtmlDocument,HtmlWindow,HtmlElement等类,只不过是对原有mshtml这个COM组件的不完整封装,只提供了mshtml的部分功能。所以许多时候,我们仍旧要借助mshtml来实现我们需要的功能。好在这些.Net类都提供了DomDocument这个属性,使得我们很容易把.Net对象转换为COM对象使用。下面的代码演示了如何查找Web页面的文本。

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

public
partial class SearchDemo : Form

{

// 建立一个查找用的TextRange(IHTMLTxtRange接口)

private
IHTMLTxtRange searchRange = null;

public
SearchDemo()

{

InitializeComponent();

}

private
void btnSearch_Click(object
sender, EventArgs e)

{

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

IHTMLDocument2 document = (IHTMLDocument2)webBrowser.Document.DomDocument;

string
keyword = txtKeyword.Text.Trim();

if
(keyword == "")

return;

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

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

if
(document.selection.type.ToLower() != "none")

{

searchRange = (IHTMLTxtRange)document.selection.createRange();

searchRange.collapse(true);

searchRange.moveStart("character", 1);

}

else

{

IHTMLBodyElement body = (IHTMLBodyElement)document.body;

searchRange = (IHTMLTxtRange)body.createTextRange();

}

// 如果找到了,就选取(高亮显示)该关键字;否则弹出消息。

if
(searchRange.findText(keyword, 1, 0))

{

searchRange.select();

}

else

{

MessageBox.Show("已搜索到文档结尾。");

}

}

}

到此为止,简单的查找就搞定了。至于替换功能,看了下一个例子,我相信你就可以触类旁通轻松搞定了

  

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

//WebClient

private
void StartLoop(int
ProxyNum)

        {

           WebClient [] wcArray = new
WebClient[ProxyNum]; //初始化

             for
(int
idArray = 0; idArray< ProxyNum;idArray++)

            {

                 wcArray[idArray] = new
WebClient();

                wcArray[idArray].OpenReadCompleted += new
OpenReadCompletedEventHandler(Pic_OpenReadCompleted2);

                wcArray[idArray].UploadDataCompleted += new
UploadDataCompletedEventHandler(Pic_UploadDataCompleted2);

                try

                {

                   

                    wcArray[idArray].Proxy = new
WebProxy(proxy[1], port);

                    wcArray[idArray].OpenReadAsync(new
Uri("http://hi.baidu.com/srxljl")); //打开WEB;

                    proxy = null;

                }

                catch

                {

                }

            }

        }

        private
void Pic_OpenReadCompleted2(object
sender, OpenReadCompletedEventArgs e)

        {

                if
(e.Error == null)

                {

                            string
textData = new
StreamReader(e.Result, Encoding.Default).ReadToEnd(); //取返回信息

                             ..

                              String cookie = ((WebClient)sender).ResponseHeaders["Set-Cookie"];

                             ((WebClient)sender).Headers.Add("Content-Type", "application/x-www-form-urlencoded");

                            ((WebClient)sender).Headers.Add("Accept-Language", "zh-cn");

                            ((WebClient)sender).Headers.Add("Cookie", cookie);

                            string
postData = ""

                            byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 转化成二进制数组

                           ((WebClient)sender).UploadDataAsync(new
Uri("http://hi.baidu.com/srxljl"), "POST", byteArray);

                }

         }

        private
void Pic_UploadDataCompleted2(object
sender, UploadDataCompletedEventArgs e)

        {

                 if
(e.Error == null)

                {

                    string
returnMessage = Encoding.Default.GetString(e.Result);

                   

                }

       }

  

HttpWebRequest post 提交 C#的WebBrowser操作frame如此简单 WebClient
提交

时间: 2024-10-20 01:27:55

HttpWebRequest post 提交 C#的WebBrowser操作frame如此简单 WebClient 提交的相关文章

C#的WebBrowser操作frame如此简单

刚学c#不久,也不太懂什么IHTMLDocument.IHTMLDocument2.IWebBrowser2等等.自己琢磨了好久,终于知道了怎么用WebBrowser操作frame和iframe. 1.获取frame的源文件 MessageBox.Show(webBrowser1.Document.Window.Frames["main"].Document.Body.InnerHtml); 2.获取frame的HTMLDocument接口 HTMLDocument doc = (HT

HTML教程-各窗口间相互操作(Frame Target)

由Frames分出来的几个窗口的内容并不是静止不变的,往往一个窗口的内容随着另一个窗口的要求而不断变化,这就提高了Frames的利用价值.为了完成各窗口之间的相互操作,我们必须为每一个窗口起一个名字,这个名字用属性Name来定义. 窗口标识(Frame Name)  <frame src=url name="窗口名"> 例如: <frame src="frame/a.html" name="left"> 定义了窗口名称,还

ecplise中git创建分支/提交分支/合并分支操作

ecplise中git创建分支/提交分支/合并分支操作 标签: git分支分支合并分支提交 2015-10-21 12:12 661人阅读 评论(0) 收藏 举报  分类: git(5)  版权声明:本文为博主原创文章,未经博主允许不得转载. 1创建分支 1.1项目右键-->team-->switch to -->new branch.选择原始分支和新建分支名称(一般项目名称+人名+时间).  1.2切换分支(项目右键->team->switch to ->分支名称),

React---简单实现表单点击提交插入、删除操作

1 import React,{Component,Fragment} from 'react' 2 3 class App extends Component { 4 constructor(){ 5 super() // 要想使用this必须使用super 6 this.state = { 7 postList:[ 8 'item1', 9 'item2', 10 'item3' 11 ], 12 inputValue:"test" 13 } 14 } 15 render(){ 1

python操作MySQL 模拟简单银行转账操作

一.基础知识 1.MySQL-python的安装 下载,然后 pip install 安装包 2.python编写通用数据库程序的API规范 (1).数据库连接对象 connection,建立python客户端与数据库的网络连接,创建方法为 MySQLdb.Connect(参数) 参数有六个:     host(MySQL服务器地址,一般本地为127.0.0.1) port(MySQL服务器端口号) user(用户名) passwd(密码) db(数据库名称) charset(连接编码) con

Node.js操作Redis的简单示例

Redis是一个key-value类型的数据库,而key全部都是字符串,value可以是集合.hash.list等等. Redis是通过MULTI/DISCARD/EXEC/WATCH这4个命令来实现事务功能.对事务,我们必须知道事务安全性是一个非常重要的. 事务提供了一种"将多个命令打包,然后一次性.按顺序执行"的机制,并且在事务执行期间不会中断--意思就是在事务完成之前,客户端的其他命令都是阻塞状态. var redis = require("redis");

文件操作的一个简单示例

在上文介绍了C中文件操作的一些基本函数,下面给一个简单例子,完成从控制台输入一段字符串,然后将其写入文件,然后从文件中读出刚刚写入的内容,代码如下: #include <stdio.h> #include <string.h> #include <stdlib.h> const int LENGTH=80; int main(void){ char mystr[LENGTH]; int lstr=0; int mychar=0; FILE * pfile=NULL; c

input ,button, textarea 1)使用disabled , 2) 显示值, 3) 表单提交. 4) jquery.form.js ajaxSubmit() 无刷新ajax提交表单.

1.使用disabled input , button  textarea 可以 被 禁用, 禁用的效果 : 1) 上面的点击事件无法使用 --- button       : 下面的 onclick属性 不能使用了. ------------------------- input: ------------------------------ textarea 2. input, textaere 显示 原先 填充的值; input:  写在 value属性上. ---------------

Hyperledger-fabric 手动操作第一次运行简单网络

Hyperledger-fabric 手动操作第一次运行简单网络 尽量使用fabric-sample/first-network目录中的yaml文件进行配置,第一次自己写配置文件问题很多都不知道怎么解决 创建一个文件夹存放命令执行过程中生成的相关文件 mkdir mynetwork # 创建存放证书的文件夹 cd mynetwork # 使用模板生成证书 cryptogen showtemplate > crypto-config.yaml #修改yaml文件中的内容使符合业务需求 crypto