string entry = Titleentry.Text;
webBrowser1.Navigate("http://www.bookdepository.com/search/advanced");
//HtmlElementCollection bookCollection;
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
HtmlElementCollection bookCollection = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement curElement in bookCollection)
{
if ((curElement.GetAttribute("id").ToString() == "searchTitle"))
{
curElement.SetAttribute("value", entry);
}
}
HtmlElementCollection filterCollection = webBrowser1.Document.GetElementById("filterSortBy").GetElementsByTagName("option");
List<HtmlElement> filterList = new List<HtmlElement>();
foreach (HtmlElement filterItem in filterCollection) { filterList.Add(filterItem); }
HtmlElement filterElement =
(HtmlElement)filterList.Where(filterOption => filterOption.GetAttribute("value").Equals("price_low_high", StringComparison.InvariantCultureIgnoreCase)).SingleOrDefault();
if (filterElement.GetAttribute("value").Equals("price_low_high"))
{
filterElement.SetAttribute("Selected", "price_low_high");
filterElement.InvokeMember("click");
}
bookCollection = webBrowser1.Document.GetElementsByTagName("button");
foreach (HtmlElement curElement in bookCollection)
{
if (curElement.GetAttribute("id").Equals("searchSubmit"))
{
curElement.InvokeMember("click");
}
}
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
MessageBox.Show("Loaded");
System.Timers.Timer myTimer = new System.Timers.Timer(5000);
myTimer.Enabled = true;
myTimer.Start();
myTimer.Stop();
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) //from here on the code doesnt work.
{
HtmlElementCollection avCollection = webBrowser1.Document.GetElementById("filterAvailability").GetElementsByTagName("option");
List<HtmlElement> avList = new List<HtmlElement>();
foreach(HtmlElement avItem in avCollection)
{
avList.Add(avItem);
}
HtmlElement avElement =
(HtmlElement)avList.Where(avOption => avOption.GetAttribute("value").Equals("1")).SingleOrDefault();
if (avElement.GetAttribute("value").Equals("1"))
{
avElement.SetAttribute("Selected", "1");
avElement.InvokeMember("click");
}
bookCollection = webBrowser1.Document.GetElementsByTagName("button");
foreach (HtmlElement curElement in bookCollection)
{
if (curElement.GetAttribute("id").Equals("searchSubmit"))
{
curElement.InvokeMember("click");
}
}
}
这里是整个代码。我试着用定时器思考设置延迟,因为它反应速度太快,但计时器也没有工作,所以我不知道问题可能是什么。该代码在调试时工作正常,但在不调试时运行时不起作用
是不工作的代码是假设创建3个计数avList并选择值1的值为1表示该网站的库存可用性。
没有调试运行时,它似乎完全忽视写在if条件的代码。
谢谢
请谨慎使用webBrowser1.ReadyState!= WebBrowserReadyState.Complete while语句。虽然在这种情况下不太可能发生,但像这样的代码可能会创建一个无限循环,因为条件可能永远不会完成,例如保持未初始化 –
我看到。但我认为那不太可能发生 –
if语句中的WebBrowserReadyState值是什么?从我所能告诉的状态改变到跳出while循环所需的时间。 –