Как проверить загрузку веб-страницы на RDP C#
У меня есть код C#, который открывает RDP - iexplore.exe другого сервера. Теперь мне нужно прокрутить веб-страницу вниз и сделать снимок экрана, но при каждой прокрутке изображение загружается не сразу. Поэтому, когда я делаю снимок экрана при каждой прокрутке, иногда выгруженное изображение сохраняется.
Я попытался поставить задержку в 1 секунду перед тем, как сделать снимок экрана, но это не полное решение проблемы. Есть ли другой способ / событие, чтобы проверить, что веб-страница / эта часть загружена?
Ниже приведен мой код:
IHTMLElement2 scroller = null;
if (currentSnapshot.IsFullPage)
{
scroller = GetScrolledElement(dimensions);
}
if (scroller != null)
{
originalScrollPosition = scroller.scrollTop; //here's where we started to begin with
maxScrollPosition = Math.Max(scroller.clientHeight, scroller.scrollHeight);
scroller.scrollTop = 0; //start at the top
}
var screen = SnapshotHelper.CaptureArea(dimensions);
images.Add(screen);
Thread.Sleep(1000);
Application.DoEvents();
Спасибо
2 ответа
Спасибо за ваши предложения, сэр. Я смог решить то же самое, используя:
while (IEApp.Busy)
{
Thread.Sleep(1000);
Application.DoEvents();
}
Я на мгновение представлю, что есть какая-то реальная и практическая причина, по которой вам нужно сделать все это через RDP, и сказать, что это не может быть сделано напрямую. При этом вы можете передать результаты снимка экрана, снятого на удаленной стороне в координации с IE, обратно клиенту RDP с использованием виртуального канала.
Client opens RDP --RDP--> Server which runs service listening for virtual channel
- Клиент отправляет запрос на рендеринг по виртуальному каналу
- Сервер рендерит и возвращает изображение
При этом было бы неплохо упомянуть об Awesomium, который использует тот же рендер, что и Chrome, через интерфейс C#.
Вы также можете реализовать фактический захват, используя встроенный элемент управления WebBrowser, который использует IE для визуализации. В этом блоге есть хорошая демонстрация того, как это сделать.