Webbrowser C# 如何在文本框中放置一个变化的值?

Webbrowser C# How to put a changing value in a textbox?

我似乎无法弄清楚如何在 Webbrowser C# 上将值文本放入 texbox.Text 中,因为在这个网站上,值发生了变化,并且存在重复的输入代码,无法精确定位 Webbrowser 以放置更改textbox.Text 中的值用户名,如下面的屏幕截图所示。

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

Problem Screenshot

这是我试图从中获取用户名的网站:fakepersongenerator

您需要手动扫描 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");

扩展 class 至:

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 轮询浏览器并手动查找值更改。