Как кликнуть на элемент, который ВИДЕН на странице

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
Всем привет, имеется сайт 2gis, когда кликаю на компанию то появляются несколько полей с Телефоном и Email, и к примеру поля с Email не видно. Если кликаешь по Email, то мышка уходит в низ и нажимает на
не нужную кнопку. Но если Email видно то и кликает правельно. Вопрос как можно делать промотку или клик на кнопку Email, если его реально видно
 

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 290
Благодарностей
844
Баллы
113
Проверить, виден ли элемент:-)
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
Проверить, виден ли элемент:-)
Да, если элемент виден РЕАЛЬНО, через экран. Тогда кликать по нему, если не видно тогда матануть экран, до тех пор пока элемент не окажеться по середине экрана, что бы гарантировано кликнуть.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 003
Благодарностей
6 447
Баллы
113
дай проще пример ссылок где видно сразу, где надо мотать, ну и что надо взять или куда кликнуть, так проще помочь будет
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
дай проще пример ссылок где видно сразу, где надо мотать, ну и что надо взять или куда кликнуть, так проще помочь будет
Скидываю архив с программой и всеми нужными файлами
Там имеется Библиотека по эмуляции Мыши с промоткой, но она не всегда срабатывает. Эту библиотеку Sibora нужно установить в папку Zennopostera которая называется ExternalAssemblies. и тогда все заработает


Обрати внимание на то что у НЕКОТОРЫХ окн с карточкой компании имеется телефон или кнопака ВСЕ КОНТАКТЫ, так вот одно из этих полей может быть не видно и тогда клик происходит по левой, не нужной кнопки
 

Вложения

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
Может кто нибудь подскажет, как можно кликнуть на элемент если его видно на экране
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 003
Благодарностей
6 447
Баллы
113
все нажимается нормально
C#:
instance.ActiveTab.FindElementByXPath("//header[@class='contact__otherHeader' or text()='Все контакты']", 0).Click();
ну а будущем вместо того чтобы весь проект кидать, просто закиньте ссылку
для интересующихся - https://2gis.ru/novosibirsk/search/вентиляция/firm/141265770302340?queryState=center/82.920685,55.029596/zoom/10
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 003
Благодарностей
6 447
Баллы
113
а вообще в целом все контакты есть в коде страницы, зачем вообще браузер использовать?
можно парсить блоки фирм, а потом уже эти блоки распаршивать на нужное
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
все нажимается нормально
C#:
instance.ActiveTab.FindElementByXPath("//header[@class='contact__otherHeader' or text()='Все контакты']", 0).Click();
Вот к примеру https://2gis.ru/novosibirsk/search/вентиляция/firm/141265769353689?queryState=center/82.920685,55.029203/zoom/10
На самом деле все зависит от размера экрана, видь не спроста там стоит бегунок, он нужен для того что бы промотать страницу. Тем более на многих сайтах данные появляются после клика на кнопку, а этой кнопки может быть не видно и вылезает этот же глюк
43036
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 003
Благодарностей
6 447
Баллы
113

backoff

Client
Регистрация
20.04.2015
Сообщения
6 003
Благодарностей
6 447
Баллы
113
или так, перенес все в 1 кубик с задержкой между действиями в пол секунды
 

Вложения

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
Спасибо
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
или так, перенес все в 1 кубик с задержкой между действиями в пол секунды
Более детально посмотрел и обратил внимание, на то что всегда кликается для того что бы матануть страницу вниз, А меня интересует вариант если на странице элемент виден, тогда ни чего не нужно делать( клик и промотка не нужна), но если элемент НЕ ВИДЕН тогда кликать и матать. Просто я сталкивался с аналогичной задачей в других проектах. Приходится всякую фигную придумывать
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 003
Благодарностей
6 447
Баллы
113
можно оставить кубик с кликом, он сам проматывает до нужного места и кликает
C#:
instance.ActiveTab.FindElementByXPath("//header[@class='contact__otherHeader' or text()='Все контакты']", 0).Click();
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 082
Благодарностей
29
Баллы
48
можно оставить кубик с кликом, он сам проматывает до нужного места и кликает
C#:
instance.ActiveTab.FindElementByXPath("//header[@class='contact__otherHeader' or text()='Все контакты']", 0).Click();
А как можно использовать полную эмуляцию, такую как
Tab1.FullEmulationMouseMoveToHtmlElement( HtmlElement); // эта функция не матает страницу вниз
Tab1.FullEmulationMouseClick("left", "click");
так то способ рабочий, но он не снял вопрос, если элемента Не Видно, тогда Нужно Матать. Если элемент Виден на экране, тогда дополнительные манипуляции не нужны
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 003
Благодарностей
6 447
Баллы
113
у меня если НЕ виден, при клике он матает, если виден, то не матает.

и такие понятия виден или не виден должны относится ТОЛЬКО к тому что если виден, ТО код присутствует в коде страницы, если НЕ виден значит отсутствует... а не то что вы глазами видите.
а элемент присутствует на всех страницах, значит виден везде, значит юзайте рабочий варик

если элемента ФАКТИЧЕСКИ нет на странице написать проверку на его поиск, как это делать ищите в поиске по сайту
 

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