c# webbrowser的几个问题:自动点击确定安全证书、判断页面加载完成、提取网页字符串
我想提取某个网站的一个子页面的一个字符串,是IP地址来的。
但是访问那个网站要先登录。
网站是局域网,外网无法访问,抱歉。
所以我先做了一个自动填表的小程序。
现在遇到几个问题如下:
1.自动点击确定安全证书
使用webBrowser.Navigate定位到网站时会弹出安全证书,上面有三个按钮“是”“否”“详细信息”,我想让它自动点击“是”应该怎么做呢?
点击“登陆”后还会弹出一个“安全信息”对话框,也有上面三个按钮,想让它自动点击“是”,这样才能成功登陆。
2.判断页面加载完成
一般情况下可以用webBrowser1_DocumentCompleted方法,但是我发现程序只在定位到第一个URL时调用webBrowser1_DocumentCompleted,如果我登陆后想webBrowser.Navigate跳转到另一个子页面,就没有调用webBrowser1_DocumentCompleted了。然后读取网页文档内容就会出现空对象的问题。
我的代码如下:
3.如何提取网页的内容
第二个页面的源文件如下:
==============================================
<FONT face="宋体">
<table cellspacing="0" rules="all" border="1" id="LogonHistory1_dgResult" style="border-width:1px;border-style:solid;font-size:X-Small;width:100%;border-collapse:collapse;">
<tr class="tableTag" nowrap="nowrap" align="Center">
<td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl0','')">登录IP</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl1','')">登录时间</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl2','')">登出时间</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl4','')">在线时间</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl5','')">国内流量</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl6','')">国际流量</a></td>
</tr><tr nowrap="nowrap" align="Center" style="background-color:White;height:25px;">
<td>10.18.2.10</td><td nowrap="nowrap" align="Left">2010-1-27 9:15:32</td><td nowrap="nowrap" align="Left"> </td><td nowrap="nowrap" align="Right">0:12'36"</td><td nowrap="nowrap" align="Right">0.02 M </td><td nowrap="nowrap" align="Right">0 M </td>
</tr><tr nowrap="nowrap" align="Center" style="background-color:#F7F7F7;height:25px;">
<td>10.18.2.10</td><td nowrap="nowrap" align="Left">2010-1-27 8:49:26</td><td nowrap="nowrap" align="Left">2010-1-27 9:14:35</td><td nowrap="nowrap" align="Right">0:25'09"</td><td nowrap="nowrap" align="Right">4 M </td><td nowrap="nowrap" align="Right">0 M </td>
</tr><tr nowrap="nowrap" align="Center" style="background-color:White;height:25px;">
<td>10.184.2.10</td><td nowrap="nowrap" align="Left">2010-1-26 18:45:34</td><td nowrap="nowrap" align="Left">2010-1-26 23:40:51</td><td nowrap="nowrap" align="Right">4:55'17"</td><td nowrap="nowrap" align="Right">40.92 M </td><td nowrap="nowrap" align="Right">0 M </td>
......
==============================================
如果我想找出第一个IP地址,上面是第一个“10.18.2.10”,应该怎么做呢?
如果用webBrowser.Document.GetElementById("");引号内应该填什么元素名?
问题较多,分数较少,请见谅!
谢谢回答!
但是访问那个网站要先登录。
网站是局域网,外网无法访问,抱歉。
所以我先做了一个自动填表的小程序。
现在遇到几个问题如下:
1.自动点击确定安全证书
使用webBrowser.Navigate定位到网站时会弹出安全证书,上面有三个按钮“是”“否”“详细信息”,我想让它自动点击“是”应该怎么做呢?
点击“登陆”后还会弹出一个“安全信息”对话框,也有上面三个按钮,想让它自动点击“是”,这样才能成功登陆。
2.判断页面加载完成
一般情况下可以用webBrowser1_DocumentCompleted方法,但是我发现程序只在定位到第一个URL时调用webBrowser1_DocumentCompleted,如果我登陆后想webBrowser.Navigate跳转到另一个子页面,就没有调用webBrowser1_DocumentCompleted了。然后读取网页文档内容就会出现空对象的问题。
我的代码如下:
public partial class Form1 : Form
{
bool isload = false;
public Form1()
{
InitializeComponent();
webBrowser1.Navigate(url1);//第一个页面
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click_1(object sender, EventArgs e)
{
HtmlElement element = webBrowser1.Document.GetElementById("username");
element.InnerText = "07lls";
element = webBrowser1.Document.GetElementById("password");
element.InnerText = "1";
webBrowser1.Document.GetElementById("image").InvokeMember("Click");
//this.webBrowser1_DocumentCompleted(null ,null);
if (isload)
{
isload = false;
webBrowser1.Navigate(url2);//跳到第二个页面
}
//this.webBrowser1_DocumentCompleted(null, null);
if (isload )
{
isload = false;
HtmlElement temp = webBrowser1.Document.GetElementById("LogonHistory1_dgResult");
//System.Threading.Thread.Sleep(10000);
MessageBox.Show(temp.ToString());
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
isload = true;
}
}
}
3.如何提取网页的内容
第二个页面的源文件如下:
==============================================
<FONT face="宋体">
<table cellspacing="0" rules="all" border="1" id="LogonHistory1_dgResult" style="border-width:1px;border-style:solid;font-size:X-Small;width:100%;border-collapse:collapse;">
<tr class="tableTag" nowrap="nowrap" align="Center">
<td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl0','')">登录IP</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl1','')">登录时间</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl2','')">登出时间</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl4','')">在线时间</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl5','')">国内流量</a></td><td nowrap="nowrap"><a href="javascript:__doPostBack('LogonHistory1$dgResult$_ctl2$_ctl6','')">国际流量</a></td>
</tr><tr nowrap="nowrap" align="Center" style="background-color:White;height:25px;">
<td>10.18.2.10</td><td nowrap="nowrap" align="Left">2010-1-27 9:15:32</td><td nowrap="nowrap" align="Left"> </td><td nowrap="nowrap" align="Right">0:12'36"</td><td nowrap="nowrap" align="Right">0.02 M </td><td nowrap="nowrap" align="Right">0 M </td>
</tr><tr nowrap="nowrap" align="Center" style="background-color:#F7F7F7;height:25px;">
<td>10.18.2.10</td><td nowrap="nowrap" align="Left">2010-1-27 8:49:26</td><td nowrap="nowrap" align="Left">2010-1-27 9:14:35</td><td nowrap="nowrap" align="Right">0:25'09"</td><td nowrap="nowrap" align="Right">4 M </td><td nowrap="nowrap" align="Right">0 M </td>
</tr><tr nowrap="nowrap" align="Center" style="background-color:White;height:25px;">
<td>10.184.2.10</td><td nowrap="nowrap" align="Left">2010-1-26 18:45:34</td><td nowrap="nowrap" align="Left">2010-1-26 23:40:51</td><td nowrap="nowrap" align="Right">4:55'17"</td><td nowrap="nowrap" align="Right">40.92 M </td><td nowrap="nowrap" align="Right">0 M </td>
......
==============================================
如果我想找出第一个IP地址,上面是第一个“10.18.2.10”,应该怎么做呢?
如果用webBrowser.Document.GetElementById("");引号内应该填什么元素名?
问题较多,分数较少,请见谅!
谢谢回答!
...全文
相关推荐
C#判断webbrowser页面最终加载完成
C#判断webbrowser页面最终加载完成
C#中的WebBrowser控件实战指南
自定义导航按钮能够提供更为丰富的用户交互体验。通过自定义按钮,开发者可以控制webbrowser控件进行前进、后退和刷新等操作。// 为前进、后退按钮添加点击事件处理逻辑// 刷新按钮的点击事件处理逻辑在上述代码中,我们定义了三个按钮的点击事件处理逻辑,分别对应webbrowser控件的前进、后退和刷新操作。某些网站会根据用户代理(User-Agent)来决定是否允许访问或显示内容。可以使用webbrowser控件的Navigate。
C# 用WebBrowser实现的多页面浏览器
当要打开新窗口时,不是弹出IE或其他浏览器,在本身的新tab页中是实现。 可以在此基础上进行多次开发,如进行DOM操作,当然做个什么自动化提交之类的也不在话下了。 --包含源码
C# webbrowser实现自动登录淘宝
不含有第三方插件,用自带的Webbrowser实现; 代码简单易懂;
C# webbrowser控件执行js脚本源码
找了好久才找到的,不容易啊。呵呵 找了好久才找到的,不容易啊。呵呵 找了好久才找到的,不容易啊。呵呵 找了好久才找到的,不容易啊。呵呵 找了好久才找到的,不容易啊。呵呵


