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;
}
}
默认网络浏览器并没有真正检测页面加载后更改的方法,因此如果您想监视更改,则必须设置 BackgroundWorker
或 Timer
轮询浏览器并手动查找值更改。
我似乎无法弄清楚如何在 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;
}
}
默认网络浏览器并没有真正检测页面加载后更改的方法,因此如果您想监视更改,则必须设置 BackgroundWorker
或 Timer
轮询浏览器并手动查找值更改。