C# 专注于WebBrowser控件的实现和AJAX响应
我们走吧 我正在尝试创建一个机器人,以通过我无法控制的网站的各种功能。起初,我认为最好只连接到该站点所绑定的数据库MySql,并在那里建立我的关联……数据库构建得如此广泛,以至于我无法确定指向何处、指向何处、如何等……这超出了我的能力范围; 所以,我的下一个想法是,创建一个机器人…足够简单,对吗?第一个障碍,不是页面上的所有内容都带有ID…打开循环 明白了 现在我一直在处理我的数据和页面响应 我正在尝试填写表单的一部分并执行AJAX搜索。问题是,没有为此完成的文档。老实说,这不是我的问题所在。我试过使用线程、睡眠、计时器等…没用C# 专注于WebBrowser控件的实现和AJAX响应,c#,ajax,browser,C#,Ajax,Browser,我们走吧 我正在尝试创建一个机器人,以通过我无法控制的网站的各种功能。起初,我认为最好只连接到该站点所绑定的数据库MySql,并在那里建立我的关联……数据库构建得如此广泛,以至于我无法确定指向何处、指向何处、如何等……这超出了我的能力范围; 所以,我的下一个想法是,创建一个机器人…足够简单,对吗?第一个障碍,不是页面上的所有内容都带有ID…打开循环 明白了 现在我一直在处理我的数据和页面响应 我正在尝试填写表单的一部分并执行AJAX搜索。问题是,没有为此完成的文档。老实说,这不是我的问题所在。我
// The app reads categories from a csv file,
// then performs a search for the category
// Search results are only displayed if I break the foreach loop
foreach (var item in bar)
{
var document = wbBrowser.Document;
if (document != null)
{
var name = document.GetElementById("product_filter_name");
if (name != null)
{
name.SetAttribute("value", item.Key.ToString());
var buttons = document.GetElementsByTagName("button");
foreach (HtmlElement button in buttons)
{
var findSearch = button.InnerHtml.IndexOf("Search");
if (findSearch > -1)
{
button.InvokeMember("click");
}
}
}
// This where the problem starts...
// I want the AJAX to run, then perform Step two,
// but the WebBrowser doesn't return the search
// results until the end (break;)
// Step Two
var elems = document.GetElementsByTagName("tr");
foreach (HtmlElement elem in elems)
{
// find particular item in result table
}
break;
// Now the search results display!!!!
// I tried implementing a timer, Thread.Sleep,
// everything I could find via Google before
//starting Step Two, but it hasn't worked!
}
}实际的浏览器控件有一个WebBrowser.OnDocumentCompleted事件,您可能需要挂接该事件,以便在ajax调用从服务器返回时收到警报 这并不总是在ajax请求上正确触发,这取决于所处的帧。当结果元素尚未呈现时,它还可以多次触发。首先,浏览器控件不是多线程的,它不会同时处理ajax请求,尽管就Widnows表单而言,它是线程友好的。第二,WebBrowserDocumentCompletedEventArgs包含一个URL属性。如果您有多个框架,将每个文档的HtmlDocument URL属性与WebBrowserDocumentCompletedEventArgs的URL属性进行比较就足够了,以了解哪个框架已完成加载。实际上,我已经尝试连接到WebBrowser.OnDocumentCompleted事件,但问题并不在于此。我相信webbrowser控件所在的初始线程在我的foreach循环中挂起,无论我如何等待该线程完成,它都不会显示结果,直到我打破循环。我甚至试着实现一个后台工作者。。。