C# 专注于WebBrowser控件的实现和AJAX响应

C# 专注于WebBrowser控件的实现和AJAX响应,c#,ajax,browser,C#,Ajax,Browser,我们走吧 我正在尝试创建一个机器人,以通过我无法控制的网站的各种功能。起初,我认为最好只连接到该站点所绑定的数据库MySql,并在那里建立我的关联……数据库构建得如此广泛,以至于我无法确定指向何处、指向何处、如何等……这超出了我的能力范围; 所以,我的下一个想法是,创建一个机器人…足够简单,对吗?第一个障碍,不是页面上的所有内容都带有ID…打开循环 明白了 现在我一直在处理我的数据和页面响应 我正在尝试填写表单的一部分并执行AJAX搜索。问题是,没有为此完成的文档。老实说,这不是我的问题所在。我

我们走吧

我正在尝试创建一个机器人,以通过我无法控制的网站的各种功能。起初,我认为最好只连接到该站点所绑定的数据库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循环中挂起,无论我如何等待该线程完成,它都不会显示结果,直到我打破循环。我甚至试着实现一个后台工作者。。。