Определения момента обновления странички

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43
Кодом
Код:
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
я обновляю страничку. Екшен выполняется, а Зена не ждет пока стр докачается.
Как определить что страничка еще тянется после выполнения этого экшена? Сейчас только пауза, но это не красивое решение.
Хелп :-)

Ага. Обычный кубик проверки текста на стр оказывается будет ждать пока стр не до качается. А все же есть какой то способ еще не пускать выполнение дальше пока страничка подтягивается? На подстраховку)
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 781
Благодарностей
1 448
Баллы
113
Кодом
Код:
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
я обновляю страничку. Екшен выполняется, а Зена не ждет пока стр докачается.
Как определить что страничка еще тянется после выполнения этого экшена? Сейчас только пауза, но это не красивое решение.
Хелп :-)

Ага. Обычный кубик проверки текста на стр оказывается будет ждать пока стр не до качается. А все же есть какой то способ еще не пускать выполнение дальше пока страничка подтягивается? На подстраховку)

Как то так, пробуйте...

C#:
Tab tab = instance.ActiveTab;
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
if (tab.IsBusy) tab.WaitDownloading();
tab.NavigateTimeout = 60;
 
  • Спасибо
Реакции: Биржевик и APXOHT

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Можно отключать игнорирование аякса. Отключать перед обновлением. Тогда дождется по идее
 
  • Спасибо
Реакции: APXOHT

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43
А как грамотно совместить
Код:
// Парсим текст из страницы
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string text = tab.PageText;

var regex = new System.Text.RegularExpressions.Regex(@"на\ дворе\ дрова");
// Поиск первого совпадения
var match = regex.Match(text);
if (match.Success)
   project.Variables["reload"].Value = match.Value;
и

Код:
Tab tab = instance.ActiveTab;
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
if (tab.IsBusy) tab.WaitDownloading();
tab.NavigateTimeout = 60;


Что бы если
успешно найдено

и второй вариант не успешно найдено

- то шло обновление?
Спасибо большое!
ПС Просто кубик хочется иметь в коллекции что бы не 4 ставить а 1
 
Последнее редактирование:

doc

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

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43
Он будет сквозной. Просто экономия места. Но в шабах выполняться будет несколько раз.
Проходя через него нужно в соответствии с найденным или не найденным решать нужно ли обновить стр. Бо у меня куча сайтов нуждается в таком решении. куда раньше смотрел не понятно)
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 781
Благодарностей
1 448
Баллы
113
Успешно найдено обновляем страницу
Парсим текст, если нашли, тогда обновляем страницу

C#:
string SourseText = instance.ActiveTab.PageText;
Regex reg = new Regex("Регулярка");
Match match = reg.Match(SourseText);
var ParsRegexText = match.ToString();
var Notext = "";
if (ParsRegexText != Notext)
{
Tab tab = instance.ActiveTab;
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
if (tab.IsBusy) tab.WaitDownloading();
tab.NavigateTimeout = 60;
}
else
{
    return null;
}

Если не найдено обновляем страницу
Парсим текст, если переменная с текстом пустая, не нашли на странице то что нам нужно, обновляем страницу

C#:
string SourseText = instance.ActiveTab.PageText;
Regex reg = new Regex("Регулярка");
Match match = reg.Match(SourseText);
var ParsRegexText = match.ToString();
var Notext = "";
if (ParsRegexText != Notext)
{
return null;
}
else
{
Tab tab = instance.ActiveTab;
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
if (tab.IsBusy) tab.WaitDownloading();
tab.NavigateTimeout = 60;
}
P.S Если нужно чтоб кубик в любом случае выполнялся, чтоб не было ошибки, тогда убираем return null;
 
Последнее редактирование:
  • Спасибо
Реакции: kagorec и APXOHT

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43
Успешно найдено...
Спасибо большое за такую помощь.
Я все же понял о чем Doc говорил про зацикленность внутри себя :(
Очень был бы признателен еслиб была опция на "зациклен в себе 10 000раз с паузой 1 сек после всей проверки"
И совсем наглая просьба - поместить в такие кода список регулярок для перебора.

т.е. берем в самом кубике по очереди

шило\ не\ мыло
рыба\ не\ мясо
курица\ не\ птица
...

и пробуем их проверить. если есть сработка - то выполняем конечное условие.

Этот снип очень помог бы в компактной и изящной работе с шабами. Выручайте :-)
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 781
Благодарностей
1 448
Баллы
113
Спасибо большое за такую помощь.
Я все же понял о чем Doc говорил про зацикленность внутри себя :(
Очень был бы признателен еслиб была опция на "зациклен в себе 10 000раз с паузой 1 сек после всей проверки"
И совсем наглая просьба - поместить в такие кода список регулярок для перебора.

т.е. берем в самом кубике по очереди

шило\ не\ мыло
рыба\ не\ мясо
курица\ не\ птица
...

и пробуем их проверить. если есть сработка - то выполняем конечное условие.

Этот снип очень помог бы в компактной и изящной работе с шабами. Выручайте :-)
я пас
 
  • Спасибо
Реакции: APXOHT

doc

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

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43
Есть код
Код:
List<string> list = new List<string>();
list.Add("Microsoft Windows");
list.Add("slovo2");
list.Add("sdfg");
int tryCount = 0;
bool isLoaded = false;
string SourseText = instance.ActiveTab.PageText;
while(tryCount<10&&!isLoaded)
{
foreach(string current in list)
{
  if(SourseText .Contains(current))
  {
   isLoaded=true;
   break;
  }
}
tryCount++;
System.Threading.Thread.Sleep(2000);
}
if(isLoaded)
{
//на странице найден код
Tab tab = instance.ActiveTab;
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
if (tab.IsBusy) tab.WaitDownloading();
tab.NavigateTimeout = 60;
//выполняеш перезагрузку

}
else
{
//код на странице не найден, прошло 10 циклов
}
Он работает не совсем как надо


По сути если запустить его на стр где нет Microsoft Windows то он будет в цикле искать это значение. Если во время этого поиска перейти на стр где есть Microsoft Windows то он продолжая исполнятся все ровно не сработает. А в сл запуск сразу увидит его.

Я думаю что он 1 раз забирает содержимое исходного кода стр и в нем пытается найти, а мне нужно что бы в каждом цикле он проверял что делается на стр.

Думаю что как то надо приколхозить код

Код:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string text = tab.DomText;

var regex = new System.Text.RegularExpressions.Regex(@"[\w\W]*");
// Поиск первого совпадения
var match = regex.Match(text);
if (match.Success)
    project.Variables["vs"].Value = match.Value;
в эти циклы. Знаний не хватает. Может кто помочь вписать одно во втрое что бы каждый цикл шла запитка из исходного кода?
:dy:
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
поставь цикл

do
{
//......
}
while(tries < 3);

при неудаче повторять три раза
 
  • Спасибо
Реакции: APXOHT

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 781
Благодарностей
1 448
Баллы
113

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43
строки дай имено которые тебе надо обернуть в цикл
Строки мне не известны. Код

Код:
List<string> list = new List<string>();
list.Add("Microsoft Windows");
list.Add("slovo2");
list.Add("sdfg");
int tryCount = 0;
bool isLoaded = false;
string SourseText = instance.ActiveTab.PageText;
while(tryCount<10&&!isLoaded)
{
foreach(string current in list)
{
  if(SourseText .Contains(current))
  {
   isLoaded=true;
   break;
  }
}
tryCount++;
System.Threading.Thread.Sleep(2000);
}
if(isLoaded)
{
//на странице найден код
Tab tab = instance.ActiveTab;
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
if (tab.IsBusy) tab.WaitDownloading();
tab.NavigateTimeout = 60;
//выполняеш перезагрузку
}
else
{
//код на странице не найден, прошло 10 циклов
}
не мой. Мне нужно что бы снип брал каждый раз СВЕЖЕЕ значение исходного кода html с открытой вкладки.
:(
 

doc

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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Строки мне не известны. Код

Код:
List<string> list = new List<string>();
list.Add("Microsoft Windows");
list.Add("slovo2");
list.Add("sdfg");
int tryCount = 0;
bool isLoaded = false;
string SourseText = instance.ActiveTab.PageText;
while(tryCount<10&&!isLoaded)
{
foreach(string current in list)
{
  if(SourseText .Contains(current))
  {
   isLoaded=true;
   break;
  }
}
tryCount++;
System.Threading.Thread.Sleep(2000);
}
if(isLoaded)
{
//на странице найден код
Tab tab = instance.ActiveTab;
instance.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)");
if (tab.IsBusy) tab.WaitDownloading();
tab.NavigateTimeout = 60;
//выполняеш перезагрузку
}
else
{
//код на странице не найден, прошло 10 циклов
}
не мой. Мне нужно что бы снип брал каждый раз СВЕЖЕЕ значение исходного кода html с открытой вкладки.
:(
Честно не могу понять. откуда ему брать свежее каждый раз, ты хочешь что бы страница в цикле обновлялась или что ???
 

APXOHT

Client
Регистрация
27.12.2013
Сообщения
881
Благодарностей
189
Баллы
43
Я хочу что бы кубик C# запускался и работал с минуту примерно.
В это время он каждые 2 секунды брал свежее значение исходного кода открытой стр в браузере и искал в нем слова из списка заданного в самом коде.
list.Add("Microsoft Windows");
list.Add("slovo2");
list.Add("sdfg");

Если слова не найдены то делаем тоже самое 30 раз скажем. Если через 30 раз не нашли Все. Конец работы идем далее.
Если хоть 1 слово найдено - шла перезагрузка стр. Все. Конец работы идем далее.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
воткни сюда ещё 30 повторений поиска, или опять что то не догоняю
  1. else
  2. {
  3. 30 повторений поиск
  4. }
я просто с браузером не работаю и не могу понять что имено в этом коде надо изменить, или вообще что в кубике находится, код не твой, так ты им пользуешься или какой то другой код
 

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