我试图通过使用HTML和JavaScript的网页自动导航。我使用C#来做这件事,并且长时间没有使用它,所以我很生疏,这是我设法提出的最好的(包括尝试webBrowserEvents2)。
我到目前为止所附的内容如下。一切运行正常,直到第5个while语句继续作为无限循环,即使有问题的元素在Web浏览器中可见。
我已经在第一个方法中注释了第5个while语句及其下面的所有内容,然后使用第二个方法列出了Web浏览器中具有ID的所有元素。我发现列出的所有元素都属于上一页,即使它不再可见。
早期的while语句中没有出现此问题,所以我不确定问题是什么。我尝试刷新,更新和无效的Web浏览器,这没有用。是什么导致这种情况发生?
//Start navigation
private void goButton_Click(object sender, EventArgs e)
{
//Load Login page
webBrowser1.Navigate(site);
while (webBrowser1.Document.GetElementById("gwt-uid-27") == null)
{
Application.DoEvents();
}
Console.WriteLine("Login page loaded");
//Login
webBrowser1.Document.GetElementById("gwt-uid-27").SetAttribute("value", password);
webBrowser1.Document.GetElementById("gwt-uid-37").InvokeMember("click");
while (webBrowser1.Document.GetElementById("popup_0") == null)
{
Application.DoEvents();
}
while (webBrowser1.Document.GetElementById("popup_0") != null)
{
Application.DoEvents();
}
Console.WriteLine("Login Successful");
//Navigate to timesheets page
webBrowser1.Document.GetElementById("gwt-uid-48").InvokeMember("click");
while (webBrowser1.Document.GetElementById("add-time") == null)
{
Application.DoEvents();
}
//Go to 'Select date' page
webBrowser1.Document.GetElementById("add-time").InvokeMember("click");
while (webBrowser1.Document.GetElementById("gwt-uid-120") == null)
{
Application.DoEvents();
}
//Enter date
string date = String.Format("{0:yyyy-M-d}", dateTimePicker);
webBrowser1.Document.GetElementById("gwt-uid-120").SetAttribute("value", date);
webBrowser1.Document.GetElementById("gwt-uid-125").InvokeMember("click");
}
private void secondary_Click(object sender, EventArgs e)
{
var v = webBrowser1.Document.All;
List<string> c = new List<string>();
foreach (HtmlElement h in v)
{
if (h.Id!=null) c.Add(h.Id);
}
Console.WriteLine("done");
}
自发布以来,我已经在VBA中编写了相同的方法,没有任何问题,也无法找出原因。