C# Web Scrapping: чтение динамически загружаемого ajax содержимого с помощью элемента управления веб-браузера - PullRequest
0 голосов
/ 10 июля 2020

Вот как я пытался. я загружаю веб-сайт в элемент управления веб-браузера веб-сайт загружает больше данных, когда пользователь прокручивает вниз.

Этот веб-сайт загружает данные динамически с помощью ajax. Я пытаюсь прочитать все динамические c теги H3 загруженные ajax, но мой код не работал. не могу понять, что мне не хватает в моем коде.

вот мой код

private void BrowserTest_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate("https://www.pinterest.com/pin/517210338432366716/");
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
    {
        HtmlElement elm = webBrowser1.Document.GetElementById("h3"); // Get "abc" element by ID
        //Console.WriteLine("elm.InnerHtml(DocumentCompleted):" + elm.InnerHtml);
        if (elm != null)
        {
            elm.AttachEventHandler("onpropertychange", new EventHandler(handler));
        }
    }
}

private void handler(Object sender, EventArgs e)
{
    HtmlElement div = webBrowser1.Document.GetElementById("h3");
    if (div == null) return;
    String contentLoaded = div.InnerHtml;
}

private void btnScrollDown_Click(object sender, EventArgs e)
{
    if (webBrowser1.Document != null)
    {
        webBrowser1.Document.Window.ScrollTo(0, webBrowser1.Document.Body.ScrollRectangle.Height);
    }
}

Ищу предложение, как достичь моей цели. спасибо

1 Ответ

0 голосов
/ 11 июля 2020

Я бы выбрал для этого другой способ;

  1. прокрутка документа вниз

  2. подождите 100 мс (или 200 мс, 500 мс, ваш выбор ..)

  3. подсчитать общее количество загруженных элементов сетки в документе

  4. повторить это с шага 1; до того как; если количество загруженных элементов сетки не меняется за последние 5 секунд. в этом случае, вероятно, это конец всех элементов, поэтому получите все элементы сетки в документе.

...