Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Клик по элементу на странице в рамках координат (https://javascript.ru/forum/dom-window/50657-klik-po-ehlementu-na-stranice-v-ramkakh-koordinat.html)

ipatrool 06.10.2014 12:54

Клик по элементу на странице в рамках координат
 
Всем привет, такая проблема: как можно сделать нажатие по элементу, который находится в заданном интервале координат?
Объясню подробнее: на сайте есть много кликабельных элементов одинакового типа с одинаковыми значениями, но мне нужно сделать клик только по одному элементу в центре экрана. Как такое можно реализовать?

Использовал такое:
$(document.elementFromPoint(х, у)).click();


Но при даже небольшом изменении положения окна, все сбивается. Нужно задать диапазон хотя бы +/- 50px и вот тут ступор.
Подскажите пожалуйста )

ipatrool 06.10.2014 13:23

И еще вопрос в догонку: заметил, что через раз на странице грузится элемент над моим элементом, который немного опускает нужный мне элемент. Как сделать проверку на наличие этого элемента (загрузился он или нет) и тогда уже делать клик по координате?

danik.js 06.10.2014 13:24

То есть он не совсем по центру? А по css-селектору его никак не поймать?

ipatrool 06.10.2014 13:56

Если еще один элемент не прогружается - по центру, если прогружается - не совсем, сдвигается пикселей на 40-50 вниз.
По css увы никак(

danik.js 06.10.2014 13:57

Цитата:

Сообщение от ipatrool
По css увы никак(

А почему? Что именно мешает?

ipatrool 06.10.2014 14:23

Цитата:

А почему? Что именно мешает?
А как? Если все элементы идентичны и даже имеют одинаковые type и value.
Где можно почерпнуть информацию, не подскажете?

danik.js 06.10.2014 14:44

Цитата:

Сообщение от ipatrool
А как? Если все элементы идентичны и даже имеют одинаковые type и value.

Ну а как тогда ты определяешь что именно он тебе нужен?
Может у него индекс уникальный (то есть - всегда пятый по счету). Почему тебе именно по нему, а не по предыдущему надо кликнуть?

ipatrool 06.10.2014 15:04

Потому что он единственный работает, остальные - защита от автоклика по type и value, я так понимаю и никаких действий они не совершают. Помимо этого этот элемент всегда в одной и той же координате находится, окромя случая, когда через раз грузится еще один элемент над ним.

ipatrool 06.10.2014 15:53

Вобщем элемент который грузится через раз это изображение и имеет title - Картинка
Попробовал сделать проверку наличия этой самой картинки вот так:
function click() {
var image = $('<img src="/tmp/pic/3.gif"/>');
  if (image.attr('width') > 0)
  $(document.elementFromPoint(x, y)).click();
else
  $(document.elementFromPoint(x, y1)).click();
}


При таком раскладе кликается только тогда, когда картинка есть, если ее нет - кликается в ту же область в которую идет клик при наличии картинки, т.е. то, что в else не кликается вообще( ЧЯДНТ?

ipatrool 06.10.2014 16:22

И кстати, где можно почитать о том, как подцепить по css ? Мне так, для саморазвития :)

danik.js 06.10.2014 16:41

Цитата:

Сообщение от ipatrool
И кстати, где можно почитать о том, как подцепить по css ? Мне так, для саморазвития

CSS селекторы. Например body > div input[type=button]:nth-of-type(5)

Можно еще xpath использовать для этой цели. Хотя по-моему бессмысленно.

ipatrool 06.10.2014 16:53

Понял, за селекторы спасибо. Думаю тут все-равно их не удастся применить.
Подскажите по моему скрипту выше пожалуйста, мне кажется, такой метод наиболее подходит )

ipatrool 07.10.2014 16:01

Как можно переделать скрипт так, что бы он делал следующее:
Если картинка есть - нажал в одну точку, если картинки нет - в другую. И можно ли сделать подобное без перегрузки iframe?
function click() {
var image = $('<img src="/tmp/pic/3.gif"/>');
  if (image.attr('width') > 0)
  $(document.elementFromPoint(x, y)).click();
else
  $(document.elementFromPoint(x, y1)).click();
}

ipatrool 08.10.2014 12:52

Либо же другой вариант - заметил, что порой кнопки отличаются на 1-2 px по высоте и ширине, т.е. нужная мне кнопка самая большая. Может можно как-то за это ухватиться?

danik.js 08.10.2014 12:56

Обходи все кнопки, потом кликай на самую большую.

krasovsky 09.10.2014 07:46

установи нужной кнопке какой нибудь атрибут.
Да и вообще почему бы просто не установить нужной кнопке id?

ipatrool 10.10.2014 17:24

Цитата:

Сообщение от danik.js (Сообщение 334040)
Обходи все кнопки, потом кликай на самую большую.

А как такое можно накодить? Там всего кнопок штуки 3-4

danik.js 10.10.2014 17:40

Получаешь кнопки:
var buttons = document.querySelectorAll('button'); // или твой селектор

Ну и через цикл for(..) перебираешь, проверяя высоту или ширину. запоминай в переменную самую высокую кнопку (сравнивая текущую перебираемую с той, что в переменной (или если это первая - то записываешь ее в переменную). После цикла кликай по ней.

Высота - button.offsetHeight, ширина - offsetWidth


Часовой пояс GMT +3, время: 15:40.