如果webBrowser中的页面包含字符串,则打开表单

时间:2014-12-12 23:13:31

标签: c# webbrowser-control

我对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";
        }
    }

然而它仍然告诉我“你不是加号”

我是这样做的吗?或..

1 个答案:

答案 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";
       }
    }