c# webbrowser的几个问题:自动点击确定安全证书、判断页面加载完成、提取网页字符串

jay314159 jay314159 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我想提取某个网站的一个子页面的一个字符串,是IP地址来的。
但是访问那个网站要先登录。
网站是局域网,外网无法访问,抱歉。
所以我先做了一个自动填表的小程序。
现在遇到几个问题如下:

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("");引号内应该填什么元素名?

问题较多,分数较少,请见谅!
谢谢回答!
...全文

相关推荐

评论 18
收藏 已收藏
分享
返回顶部
jay314159
C# 111,129 成员 642,538 内容