Застрял в реализации WebBrowser Control и работе с ответами AJAX - PullRequest
1 голос
/ 14 февраля 2011

Вот и мы ...

Я пытаюсь создать бота, чтобы пройти через различные функции веб-сайта, которым я не могу управлять. Сначала я подумал, что было бы лучше просто подключиться к базе данных (MySql), к которой привязан сайт, и связать меня там ... База данных построена настолько широко, что я не могу понять, куда указывать, куда как и т. д. Это за пределами моего (DBA) кастинга программиста ...;) Итак, моя следующая идея - создать бота ... достаточно просто, верно? Первое препятствие, не все на странице имеют идентификатор ... принести петли ...

Понял.

Теперь я застрял в работе с моими данными и ответом страницы.

Я пытаюсь заполнить часть формы и выполнить поиск AJAX. Проблема в том, что нет DocumentCompleted для этого. И, честно говоря, не в этом моя проблема. Я пытался использовать Thread.Sleep, Timers и т.д ... безрезультатно.

// 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!
}

}

1 Ответ

0 голосов
/ 14 февраля 2011

Фактический элемент управления браузера имеет событие WebBrowser.OnDocumentCompleted, к которому вам, возможно, придется подключиться, чтобы вы могли получать оповещения о возврате вызова ajax с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...