- Регистрация
- 28.02.2016
- Сообщения
- 2 058
- Благодарностей
- 745
- Баллы
- 113
Привет. Не знаю как правильно назвать тему, если что, не обессудьте, поправьте.
Использую этот код.
Проблема возникает, иногда на некоторых сайтах, кубик очень долго отрабатывает.
Нужно если кубик долго отрабатывает (например больше 10 сек) сайт закрывать и уходить. Начал лепить, типа время сверить до и после, а получается минута, проходит и опять секунды, подскажите пожалуйста, как правильно, это реализовать?
Использую этот код.
C#:
https://zennolab.com/discussion/threads/kak-sdelat-ozhidanie-poka-ne-podgruzit-java-ehlement.76471/post-512250
public static class ZHelpers
{
private static string[] LoadStates = {"complete", "uninitialized", }; //Статусы которые считаем что документ загрузился
/// <summary>
/// Ожидание загрузки таба
/// </summary>
/// <param name="tab">Таб загрузки которого ждем</param>
/// <param name="maxWaitMs">Максимальное ожидание в мс, по умолчанию 60 сек</param>
public static void TabLoadWait(this Tab tab, int maxWaitMs = 60 * 1000)
{
maxWaitMs = maxWaitMs/2;
//Делаем 2 захода, для точной уверенности
for (var i = 0; i < 2; i++)
{
//TODO заменить на токен
//Когда выходим
long maxTime = DateTime.Now.Ticks + maxWaitMs * 10000;
//Проверям на загрузку странцы пока не кончится время или мы не получим все интересующие нас данные
do
{
// TODO: проверка прерывания
new System.Threading.ManualResetEvent(false).WaitOne(2000);
if (tab.IsBusy) tab.WaitDownloading();
//Проверяем через js document.readyState, статус всех документов на страницы
bool isNotComplete = false;
foreach (var document in tab.AllDocuments.Documents)
{
string readyState = document.EvaluateScript("return document.readyState;");
if (!String.IsNullOrEmpty(readyState) && !LoadStates.Contains(readyState))
{
if (readyState != "interactive" || !document.URL.StartsWith("about:",StringComparison.Ordinal))
isNotComplete = true;
}
}
// Если у всех статус complete считаем что прошли проверку
if (!isNotComplete)
break;
}
while (DateTime.Now.Ticks < maxTime);
}
}
}
И вызывать из c# кубика с помощью:
instance.ActiveTab.TabLoadWait();
Проблема возникает, иногда на некоторых сайтах, кубик очень долго отрабатывает.
Нужно если кубик долго отрабатывает (например больше 10 сек) сайт закрывать и уходить. Начал лепить, типа время сверить до и после, а получается минута, проходит и опять секунды, подскажите пожалуйста, как правильно, это реализовать?