а зачем переход на about:blank ?зачем хитрить ? обычная логика.
да на всякий пожарныйа зачем переход на about:blank ?
что бы не бот не запутался в развилках. 
А можно посмотреть как выглядит код "Ожидание появления элемента"да на всякий пожарныйчто бы не бот не запутался в развилках.
я такую конструкцию просто копирую, править не охота![]()
да копия кубика поиска по xpathА можно посмотреть как выглядит код "Ожидание появления элемента"
// входные параметры
string xpath_control = @"//input[@id='email']"; // xpath контрольного элемента
int pause = 1000; // пауза между интерациями
int col_interaciy_wait_change_max = 50; // максимальное количество интераций для ожидания элемента
// ----- ожидание -----
for (int i = 0; i<col_interaciy_wait_change_max; i++)
{
HtmlElementCollection he_all = instance.ActiveTab.FindElementsByXPath(xpath_control);
if (!he_all.IsVoid)
{
for (int k = 0; k < he_all.Count; k++)
{
HtmlElement he = he_all.Elements[k];
if (!he.IsVoid)
{
if (he.Width>0 && he.Height>0)
{
Thread.Sleep(1000); // дополнительное ожидание после нахождения
return 0;
}
}
}
}
Thread.Sleep(pause);
}
throw new Exception();
Это получается я могу свой путь xpath просто прописать, и будет работать?да копия кубика поиска по xpath
C#:// входные параметры string xpath_control = @"//input[@id='email']"; // xpath контрольного элемента int pause = 1000; // пауза между интерациями int col_interaciy_wait_change_max = 50; // максимальное количество интераций для ожидания элемента // ----- ожидание ----- for (int i = 0; i<col_interaciy_wait_change_max; i++) { HtmlElementCollection he_all = instance.ActiveTab.FindElementsByXPath(xpath_control); if (!he_all.IsVoid) { for (int k = 0; k < he_all.Count; k++) { HtmlElement he = he_all.Elements[k]; if (!he.IsVoid) { if (he.Width>0 && he.Height>0) { Thread.Sleep(1000); // дополнительное ожидание после нахождения return 0; } } } } Thread.Sleep(pause); } throw new Exception();
конечноЭто получается я могу свой путь xpath просто прописать, и будет работать?

С логикой то все ясно, я примерно так и делаю. С попаданием на конкретную страницу все просто и можно сделать обычными кубиками - загрузить сайт, проверить наличие текста, если он есть, продолжаем работать, но бывает случаи, когда нужно кликнуть на кнопку и например загрузить картинку, окно загрузки есть, а картинка не загрузилась.
в чем проблема сделать петли повтора в виде подпроекта/плагина ?С логикой то все ясно, я примерно так и делаю. С попаданием на конкретную страницу все просто и можно сделать обычными кубиками - загрузить сайт, проверить наличие текста, если он есть, продолжаем работать, но бывает случаи, когда нужно кликнуть на кнопку и например загрузить картинку, окно загрузки есть, а картинка не загрузилась.
В моем случае проект очень большой и вставлять на каждом кубике даже конструкцию из примера - проблема. Бывают случаи когда подтормаживает интернет, перезагружаются прокси и т.д. и тогда происходит ошибка, хотя по факту через пару секунд все уже могло быть хорошо, выставлять везде большие задержки и "петли повторных попыток" слишком громоздко. 1 проект выполняется около 30 минут и бывает, когда уже почти все готово, обрывается и вся работа в пустую.
Наверное, в том что я новичок, поэтому и задаю вопросы.в чем проблема сделать петли повтора в виде подпроекта/плагина ?
всю логику по повтору, проверки, перезагрузки можно вынести в подпроект/плагин и передавая разные входные настройки можно неплохо так уменьшить основной проект.Наверное, в том что я новичок, поэтому и задаю вопросы.
Можете пояснить подробнее?
Создается отдельный проект и запускается в случае ошибки или как?
Спасибо.
@Phoenix78 Привет
а подскажи пожалуйста код этого кубика , хочу так же сделать проверку , т.к тоже встречается такое
За ранее спасибо
int Count_Max = 3;
int Count_Check = 0 ; try{ Count_Check = int.Parse(project.Variables["Counter_Wait_Load_Data"].Value) +1 ;} catch{}
project.Variables["Counter_Wait_Load_Data"].Value = Count_Check.ToString();
if ( Count_Check >= Count_Max ) throw new Exception();
else return 0;
Спасибо большоеC#:int Count_Max = 3; int Count_Check = 0 ; try{ Count_Check = int.Parse(project.Variables["Counter_Wait_Load_Data"].Value) +1 ;} catch{} project.Variables["Counter_Wait_Load_Data"].Value = Count_Check.ToString(); if ( Count_Check >= Count_Max ) throw new Exception(); else return 0;
@Phoenix78, полезный плагин! Есть возможность поделиться? Буду благодарен!)для своих проектов, где не надо продавать, я активно использую плагин , в который я запихал много полезного функционала.
Посмотреть вложение 75778
можно просто использовать подпроект.
@Phoenix78, полезный плагин! Есть возможность поделиться? Буду благодарен!)
он платный.@Phoenix78 Я б тоже не отказался б
посмотреть как устроено все , то удобная штука получается , не надо кубики тягать с проекта в проект


