C# Phantom JS прокрутка страницы вниз до исчезновения элемента класса - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть страница, которая загружает картинки при прокрутке вниз. В то время как его код загрузки html имеет класс "ajax - загрузка vk-like b-emer_marker active", и когда он загружен полностью, этот элемент просто исчезает. Как я могу загрузить страницу, пока этот элемент не исчезнет? Первый пример работает нормально, но не полностью загружает страницу, пока этот элемент не исчезнет. Второй вариант не работает в принципе, я не могу точно сказать, в чем проблема, но, по моему мнению, просто никогда не работает.

Вот что я пытался:

private static void GetRenderedWebPage(string url, TimeSpan waitAfterPageLoad, string height, Action<string> callBack)
{
    const string cEndLine = "All output received";

    var sb = new StringBuilder();
    var p = new PhantomJS();
    p.OutputReceived += (sender, e) =>
    {
        if (e.Data == cEndLine)
        {
            callBack(sb.ToString());
        }
        else
        {
            sb.AppendLine(e.Data);
        }
    };

    // works perfectly, but not loading page fully
    p.RunScript(@"
        var page = require('webpage').create();
        page.viewportSize = { width: 1920, height: 1080 };
        page.onLoadFinished = function(status) {
            if (status=='success') {
                setTimeout(function() {
                    console.log(page.content);
                    console.log('" + cEndLine + @"');
                    phantom.exit();
            }," + waitAfterPageLoad.TotalMilliseconds + @");
        }
    };
    var url = '" + url + @"';
    page.open(url);", new string[0]);

    /* doesnt work at all
    p.RunScript(@"
        var page = require('webpage').create();
        page.viewportSize = { width: 1920, height: 1080 };
        var url = '" + url + @"';
        page.open(url, function () {
            window.setInterval(function() {
                var count = page.content.match(/class='.ajax-loading vk-like b-appear_marker active'/g);
                if (count === null)
                {
                    page.evaluate(function() {
                        window.document.body.scrollTop = document.body.scrollHeight;
                    });
                }
                else
                {
                    console.log(page.content);
                    console.log('" + cEndLine + @"');
                    phantom.exit();
                }
            }, 500);
        });
    ", new string[0]);
    */
}

Использование это похоже на получение вывода в файл .txt и в htmlDocument для анализа того, что я хочу дальше.

try
{
    GetRenderedWebPage(link, TimeSpan.FromSeconds(Convert.ToDouble(time)), height, output =>
    {
        File.WriteAllText("output.txt", output);
        htmlDocument.LoadHtml(output);
    });
}
catch
{
     Console.WriteLine("an error has occured.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...