Webbrowser C#如何在文本框中放置更改值?

时间:2018-01-09 21:39:14

标签: c# windows winforms browser webbrowser-control

我似乎无法弄清楚如何将值文本放到Webbrowser C#上的texbox.Text中,因为这个网站的值会发生变化,输入代码会有重复,并且无法确定Webbrowser是否会将更改后的值用户名放入textbox.Text,如下面的截图所示。

我希望有人知道如何使用C#中的Webbrowser执行此操作 提前谢谢。

Problem Screenshot

这是我尝试从fakepersongenerator

获取用户名的网站

1 个答案:

答案 0 :(得分:0)

您需要手动扫描DOM并根据它的xpath找到该元素。像这样:

webBrowser.DocumentCompleted += (o, e) =>
{
    var frame1 = webBrowser.Document.Body.GetElementsByClassName("frame-1");
    if (frame1.Count > 0)
    {
        var rows = frame1[0].GetElementsByClassName("row no-margin");
        if (rows.Count > 4)
        {
            var usernameForm = rows[4].GetElementsByClassName("form-control");
            if (rows.Count > 0)
            {
                // Do something with value here
                Console.WriteLine(usernameForm[0].GetAttribute("value"));
            }
        }
    }
};
webBrowser.Navigate("http://www.fakepersongenerator.com/Index/generate");

扩展类:

internal static class Utils
{
    internal static List<HtmlElement> GetElementsByClassName(this HtmlElement doc, string className = "")
    {
        var list = new List<HtmlElement>();
        foreach (HtmlElement e in doc.All)
            if (e.GetAttribute("className") == className)
                list.Add(e);
        return list;
    }
}

在网页加载后,默认网络浏览器中无法检测到更改,因此如果您想监控更改,则必须设置BackgroundWorkerTimer轮询浏览器并手动查找值更改。