我对C#很陌生,我正在处理一个登录到网站的表单,导航到特定页面,然后它应该检查该页面是否包含单词“Registered Plus”(这一切都在webBrowser中)除了最后一部分,我现在全部工作了。我一直在思考和搜索如何使我的应用程序检查当前网页是否包含“已注册的加号”...这是我目前为止按钮的代码:
private void btnReboot_Click(object sender, EventArgs e)
{
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("username")[0].SetAttribute("value", usernameBox.Text);
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("password")[0].SetAttribute("value", passwordBox.Text);
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("submit")[0].InvokeMember("click");
webBrowser1.Navigate("http://website.com/login.php?action=login");
}
是否有人知道如何检查此页面:http://website.com/login.php?action=login是否包含“已注册的加号”?或者也许是关于如何做类似的事情的教程?非常感谢提前。已经被困在这一部分已经有一段时间了..
更新:
得到一条评论告诉我有关DocumentText.Contains的事情,试过这个:
private void btnReboot_Click(object sender, EventArgs e)
{
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("username")[0].SetAttribute("value", usernameBox.Text);
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("password")[0].SetAttribute("value", passwordBox.Text);
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("submit")[0].InvokeMember("click");
webBrowser1.Navigate("http://darkbox.nl/usercp.php?action=usergroups");
if (webBrowser1.DocumentText.Contains("Registered Plus"))
{
label3.Text = "You're plus";
}
else
{
label3.Text = "You're not plus";
}
}
然而它仍然告诉我“你不是加号”
我是这样做的吗?或..
答案 0 :(得分:1)
我现在无法测试代码,但最大的问题是对webBrowser1.Navigate的调用是异步执行的。就像您在IE或Chrome中请求它一样,页面加载(或给出错误)需要花费一秒到一分钟的时间。另一方面,您的C#代码从Navigate请求移动只需要几毫秒到下一行代码。
一旦Navigate()方法返回指示已完成的事件,您需要触发检查Document的代码。
private bool shouldEvaluateReponse = false;
private void btnReboot_Click(object sender, EventArgs e)
{
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("username")[0].SetAttribute("value", usernameBox.Text);
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("password")[0].SetAttribute("value", passwordBox.Text);
webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("submit")[0].InvokeMember("click");
shouldEvaluateResponse = true;
webBrowser1.Navigate("http://darkbox.nl/usercp.php?action=usergroups");
}
public void WebBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//ignore this method if the flag isn't set.
if (!shouldEvaluateResponse) return;
//reset the flag so this method doesn't keep executing
shouldEvaluateResponse = false;
if (webBrowser1.DocumentText.Contains("Registered Plus"))
{
label3.Text = "You're plus";
}
else
{
label3.Text = "You're not plus";
}
}