Нужна подсказка

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
Народ, подскажите, как синхронизироваться с вкладкой обозревателя, то есть дождаться завершения определенного действия на странице, например отображения меню после клика по кнопке?

Проблема в том, что в верстке изначально меню отсутствует и генерируется жаваскриптом.

if (tab.IsBusy) tab.WaitDownloading() не помогает, если страница ничего не подгружает аяксом.

это параметры которые влияют на работу выше указанной функции которые я использую в своем зенно скрипте.

instance.IgnoreAjaxRequests = false;
instance.IgnoreAdditionalRequests = false;
instance.IgnoreFrameRequests = true;
instance.IgnoreFlashRequests = true;

Есть ещё tab.WaitInteractive() и tab.WaitPreComplete() , но я не совсем понимаю что они делают.

System.Threading.Thread.Sleep(t) тоже не вариант, можно обработать 100 страниц без проблем, но можно через одну не вкладываться в отведенное время, к тому же спустя некоторое время начинает подтупливать инстанс, и начинается полная рассинхронизация С# и бродилки.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
  • Спасибо
Реакции: izunag

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
в кубиках же реализовано ожидание элемента
 

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
Спасибо, как крайний вариант подойдет, я просто в основном на странице работаю с JS, а такой вариант обдумывал, но он не очень удобен.

хотелось бы как-то так

Код:
tab.MainDocument.EvaluateScript(@"
  document.querySelector('#j-i-form .ajax.j-toggler[data-type=""simple""]').click();
");
if (tab.IsBusy) tab.Wait ... () ; //ждем состояния готовности

tab.MainDocument.EvaluateScript(String.Format(@"
  document.querySelector('#j-i-title').value = '{0}';
", project.Variables["title"].Value)
if (tab.IsBusy) tab.Wait ... ()
.....
// и так далее
но на деле бродилка даже ничего сделать не успевает, как C# уже выполняет следующую часть JS;
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
вторая вкладка свойств любого кубика действий (гет, сет, райс)
в С# не идентично конвертирует.

// Конструктор действий, тип Set
HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "innertext", "просмотреть ваше объявление", "text", 0);
if (he.IsVoid) return -1;

// Установить атрибуту "href" значение "#"
he.SetAttribute("href", "#");

хотя в действии явно указано подождать элемент 5 секунд и подождать перед выполнением 1 секунду ?


мне желательно чтобы вся задача была решена одним максимум 3-5 действиями на С#, а не лепить монстра из кучи действий
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
в С# не идентично конвертирует.

// Конструктор действий, тип Set
HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "innertext", "просмотреть ваше объявление", "text", 0);
if (he.IsVoid) return -1;

// Установить атрибуту "href" значение "#"
he.SetAttribute("href", "#");

хотя в действии явно указано подождать элемент 5 секунд и подождать перед выполнением 1 секунду ?


мне желательно чтобы вся задача была решена одним максимум 3-5 действиями на С#, а не лепить монстра из кучи действий
нужно c# - делай цикл, который на будет с задержкой в 5 сек проверять, есть элемент на странице. Если есть - выход из цикла. Если нет, снова 5сек паузы и новая проверка. Чтобы не зациклиться, делай ограничение на количество проверок

Конвертер кубиков не учитывает эти фичи
 
  • Спасибо
Реакции: izunag

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
нужно c# - делай цикл, который на будет с задержкой в 5 сек проверять, есть элемент на странице. Если есть - выход из цикла. Если нет, снова 5сек паузы и новая проверка. Чтобы не зациклиться, делай ограничение на количество проверок
Это как раз то, что порекомендовал orka13 и то, что я обсуждал выше.

Благодарю за помощь, вопрос снят.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)