Проверка видимости элемента

Lex12

Client
Регистрация
30.01.2019
Сообщения
25
Благодарностей
0
Баллы
1
Добрый день!
Просьба подсказать, возможно ли в Зеннопостере определять виден ли нужный элемент на экране инстанса в данный момент? Не есть ли он вообще на странице где то, а именно виден на экране.
 

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
855
Благодарностей
246
Баллы
43
Я обычно проверяю через
if (he.DisplacementInDocument.X > 0 && he.DisplacementInDocument.Y > 0)
 
  • Спасибо
Реакции: Lex12
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
возможно также пригодится учитывать уровень слоя: z-index
 
  • Спасибо
Реакции: Lex12

Lex12

Client
Регистрация
30.01.2019
Сообщения
25
Благодарностей
0
Баллы
1
Спасибо за ответы! Я так понимаю стандартного решения для этого нет в Зеннопостере, может есть у кого кусочек кода для примера, куда можно просто свой элемент подставить?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Спасибо за ответы! Я так понимаю стандартного решения для этого нет в Зеннопостере, может есть у кого кусочек кода для примера, куда можно просто свой элемент подставить?
думаешь за десяток лет нет рабочего готового решения ?
поиск по форуму работает, если что :bk:

вот пара ссылок https://zennolab.com/discussion/threads/poluchenija-znachenij-width-i-height.85331/post-573669
 

Lex12

Client
Регистрация
30.01.2019
Сообщения
25
Благодарностей
0
Баллы
1
В этих статьях про поиск элемента на странице, но нужно решение не найти элемент, а определить находится ли нужный элемент в данный момент именно в видимой части инстанса.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
В этих статьях про поиск элемента на странице, но нужно решение не найти элемент, а определить находится ли нужный элемент в данный момент именно в видимой части инстанса.
надо учится читать информацию. и искать ее.
раз уж тебе кинули ссылки, то наверно не просто так. там есть нужная тебе инфа. на форуме очень много что есть, даже в готовом виде.

вот скрин с первой же ссылки. но кажется до этого места не хватило терпения дочитать у когото

81442
 
  • Спасибо
Реакции: ledsan

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Чаще всего видимость элементов нужно смотреть в его атрибутах в коде. Иногда элементы подтягиваются через скрипты. Попробуйте прокрутку до нужного элемента, если он есть на странице.
ScrollIntoView Method
 

Lex12

Client
Регистрация
30.01.2019
Сообщения
25
Благодарностей
0
Баллы
1
вот скрин с первой же ссылки. но кажется до этого места не хватило терпения дочитать у когото
Все же мне кажется речь о разных вещах.... Приведу пример, на скрине мы видим выдачу гугла по запросу, и видим визуально в браузере только верх этой выдачи. Внизу есть кнопка "Следующая", но на данный момент она за экраном. И я пытаюсь найти код который может определять видна эта кнопка на данный момент или нет (не в древе элементов, а именно на экране видимой части странички). Найти ее не проблема и проскролить до нее можно, она не скрыта, не фейковая, но именно при загрузке страницы находится за экраном. Просто нужно определять видна ли она визуально в окошке браузера при просмотре страницы на данный момент.

333.jpg
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
эммм... а к чему такие сложности ?
такого изощренного функционала наверно и в самом деле не найти. Потому что это для человека ограничения, а для бота нет. никто и не заморачивается с функционалом для человека.
потому что просто ScrollIntoView и элемент визуально виден на экране.

в самом деле, какая конечная цель то ?
 

Lex12

Client
Регистрация
30.01.2019
Сообщения
25
Благодарностей
0
Баллы
1
в самом деле, какая конечная цель то ?
Цель очеловечить бота, найти и убрать палевные моменты. Постепенно скроллить страницу и кликать по элементам по мере их появления на экране. Сейчас ScrollIntoView как то по ботски это делает. Например, нужный сайт в выдаче может быть в верху или внизу страницы и это метание по выдаче то вверх то вниз как то не естественно выглядит. Палится где то эмуляция мыши, а где непонятно, пытаюсь экспериментировать.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Цель очеловечить бота, найти и убрать палевные моменты. Постепенно скроллить страницу и кликать по элементам по мере их появления на экране. Сейчас ScrollIntoView как то по ботски это делает. Например, нужный сайт в выдаче может быть в верху или внизу страницы и это метание по выдаче то вверх то вниз как то не естественно выглядит. Палится где то эмуляция мыши, а где непонятно, пытаюсь экспериментировать.
довольно узкая задача, мало кто заморачивается так.
ну вот похожая тема https://zennolab.com/discussion/threads/proverka-vidimosti-ehlementa.78390/?from=similarthreads
еще https://zennolab.com/discussion/threads/proverka-vidimosti-ehlementa-na-ehkrane.33787/?from=similarthreads

так же стоит почитать статью про получение атрибутов элемента из первой ссылки и поискать на форуме темки про абсолютные и относительные координаты мышки и экрана.
 
  • Спасибо
Реакции: Lex12

p-sergei

Client
Регистрация
20.12.2016
Сообщения
542
Благодарностей
262
Баллы
63
Просто нужно определять видна ли она визуально в окошке браузера при просмотре страницы на данный момент.
я что-то не пойму, а в чем сложность получить атрибут элемента "topInTab" и если он больше высоты инстанса или с отрицательным значением, значит элемент за пределами окна браузера?!
 
  • Спасибо
Реакции: Lex12

Lex12

Client
Регистрация
30.01.2019
Сообщения
25
Благодарностей
0
Баллы
1
я что-то не пойму, а в чем сложность получить атрибут элемента "topInTab" и если он больше высоты инстанса или с отрицательным значением, значит элемент за пределами окна браузера?!
Спасибо, похоже рабочий вариант.
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
Хотелось бы добавить от себя. Проверка - "режим параноик" )

C#:
for(int i=0; i < 30; i++)
        {   

        HtmlElement check = instance.ActiveTab.FindElementByXPath(@"ТУТ_XPATH", 0);
        var check_top = check.GetAttribute("topInTab");
        var check_height = check.GetAttribute("height");
        var check_width = check.GetAttribute("width");
        var check_style = check.GetStylePropertyValue("display");
        project.SendInfoToLog(check_height +" " + check_height + " " +check_width + " " + check_style); //выводит в лог значения
        
            if (check_top == "")
            {   
            
            }
            else
            {
                if (int.Parse(check_top) > 0 && int.Parse(check_height) > 0 && int.Parse(check_width) > 0 && check_style != "none")
                {
                project.SendInfoToLog("Элемент загрузился");
                return "ok";
                }   
            }

        System.Threading.Thread.Sleep(1000);
        }
 

doc

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

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
ну за экраном и что? На нормальной эмуляции зенка сделает вид, что проматывает страницу к этой кнопке, прежде чем кликнуть
Это у меня не для кликов , а для проверки наличия или не наличия элемента на странице
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
А что, в русском гугле поведенческие подвезли уже ?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Это у меня не для кликов , а для проверки наличия или не наличия элемента на странице
если ты с элементом никак не взаимодействуешь, то о каком палеве идёт речь?

ред. Аааа, ты не автор. Это у него палево
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
если ты с элементом никак не взаимодействуешь, то о каком палеве идёт речь?

ред. Аааа, ты не автор. Это у него палево
Да я в другую тему хотел написать , перепутал не много. Просто искал по проверке видимости элемента тему и сюда тоже попадал. Оставил код , может кому пригодится.
 
  • Спасибо
Реакции: doc

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