У меня есть страница, которая загружает картинки при прокрутке вниз. В то время как его код загрузки 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.");
}