Загружать страницу до появления определенного элемента

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Был тут кусок на C# там страница грузица пока не появится определенный элемент, потом можно нажать условно на "стоп".
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
var tab = instance.ActiveTab;
for (int i=0; i<120; i++)
{
var he = tab.FindElementByAttribute("тэг","имя аттрибута","значение","тип поиска",0);
if (!he.IsVoid)
{
int height = Convert.ToInt32(he.GetAttribute("height"));
if (height != 0)
{
return "ok";
}
}
System.Threading.Thread.Sleep(500);
}
return null;


Ждет 1 минуту - если нужно увеличивайте число прохода цикла
 
  • Спасибо
Реакции: Gfoblin

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
var tab = instance.ActiveTab;
for (int i=0; i<120; i++)
{
var he = tab.FindElementByAttribute("тэг","имя аттрибута","значение","тип поиска",0);
if (!he.IsVoid)
{
int height = Convert.ToInt32(he.GetAttribute("height"));
if (height != 0)
{
return "ok";
}
}
System.Threading.Thread.Sleep(500);
}
return null;


Ждет 1 минуту - если нужно увеличивайте число прохода цикла
Так будет немного правильнее:

Код:
var tab = instance.ActiveTab;
for (int i=0; i<120; i++)
{
    var he = tab.FindElementByAttribute("тэг","имя аттрибута","значение","тип поиска",0);
    if (!he.IsVoid && he.GetAttribute("height")!="0")
        {
            tab.Stop();
            return "ok";
        }
    System.Threading.Thread.Sleep(500);
}
return null; //элемент не найден
 
  • Спасибо
Реакции: a10ne и Gfoblin

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Мужики спасибо, ну и еще вопрос назрел
Захожу
instance.ActiveTab.Navigate("https://www.yandex.ru/","http://www.mysite.com/");

вот как мне или дождаться окончания загрузки страницы целиком
instance.ActiveTab.WaitDownloading();
или прервать это дело в случае появления элемента?

Я так понимаю скрипт выше будет ждать минуту па любому, даже если сбой прокси/сайт_лег/ и т.д. и загрузка прекратилась?
Спасибо.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
Он будет ждать минуту появления элемента. Если элемент появится раньше, то скрипт закончится.
Если будет сбой прокси и т.д., то он подождёт.

Можно добавить проверку на какой то элемент или код в тексте, который 100 % должен сразу отобразиться. Сначала делаете проверку по нему, если есть, то ждём появления более позднего элемента. Если нету - сразу прерываемся. Как то так...В код уж сами это добавьте. Всё по аналогии с тем, что есть выше.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Как этот снипет заставить взаимодействовать с экшеном Переход на страницу?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
В сниппет надо ещё tab.IsBusy добавить чтобы выходил к моменту, когда страница перестала грузиться
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Плюнул ломать голову, перешел на запросы. :D
 

lzlmrf

Client
Регистрация
14.08.2015
Сообщения
488
Благодарностей
149
Баллы
43

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
а как это задать для FindElements ? пробывал так if (he.Count=="") пишет что нельзя использовать == для int , с ! тоже ругается
для FindElements именно !he.IsVoid не подходит, так как у Вас получается коллекция элементов, а не один элемент. Получайте коллекцию и ложите в список, если нужно удостоверится что каждый элемент присутствует.
Или же после получения Count - обычное сравнение if (Count != 0)
 
  • Спасибо
Реакции: lzlmrf

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