Что нового

Найти координаты объекта

ZaEzzz

Новичок
Сообщения
28
Репутация
2
Всем добрый день!
В общем суть такова:
В ИЕ имеем объект с id='x'
Мы ищем его и находим. Требуется узнать его координаты для того, чтобы подвести курсор мышки и кликнуть.
Кликать функциями для ИЕ не позволяет религия - цели не те.
Для чего это нужно:
Может такое быть, что в следствии ошибки объект будет находиться на нижнем слое z-index и функцией мы на него кликнем, но вот мышкой мы на него не попадем. Вот именно это и требуется проверить.

Всем заранее спасибо :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ZaEzzz
в таком виде эта тема не подходит ни для этого раздела, ни в стол заказов. поэтому ты уж определись
1. если хочешь, чтобы это было в разделе для новичков, то приведи наработки.
2. если хочешь чтобы в стол заказов, то бишь, чтобы за тебя все сдеали
а) оформи сообщение в соответствии с правилами стола заказов
б) уточни ТЗ, что за сайт, на что кликать, как кликать, чего ожидать и прочее...

в противном случае тема либо закроется либо уйдет в раздел для общение
 
Автор
Z

ZaEzzz

Новичок
Сообщения
28
Репутация
2
Вот пока то, что имеется у меня:
Вызывается функция, которая начинает поиск по имени объекта или его ID. Далее кликает на него.
Код:
Func WebClick(ByRef $oForSearch, ByRef $ObjType, ByRef $NameId)
	; Функция для совершения слика в одну строку
	If $ObjType='id' Then
		$oForClick=_IEGetObjById($oForSearch, $NameId)
	ElseIf $ObjType='name' Then
		$oForClick=_IEGetObjByName($oForSearch, $NameId)
	Else
		MsgBox(0, "Fatall Error", 'В функцию Click() был передан неверный параметр $ObjType'
		Exit
	EndIf
	_IEAction ($oForClick, "click")
EndFunc

Но столкнулся с тем, что в определенные моменты она срабатывает правильно, а на самом деле такого быть не может - объект, который мы нашли находится на слое с z-index=10 и как раз там же находится div со слоем у которого z-index=100.
В итоге скрипт может без труда нажать на объект (к примеру кнопка), а пользователь в жизни просто не увидит ее - он будет видеть верхний слой.
Мне не хватает только одного момента: как найти координаты расположения данного объекта. Хотя бы не расположение xy на экране, а относительно самого документа HTML.

ЗЫ: посчитал, что это как раз раздел с нужной тематикой - не хотел ничего нарушать и как-то вести себя не подобающе. Какая еще нужна информация, говорите - у меня много наработок, но по теме только это.
ЗЗЫ: сайта нет так как это закрытый продукт.
 

shakur

Осваивающий
Сообщения
76
Репутация
24
Кликать функциями для ИЕ не позволяет религия - цели не те.
а это как вы кликаете? не при помощи ф-ций IE :scratch:
Код:
_IEAction ($oForClick, "click")
Мы ищем его и находим. Требуется узнать его координаты для того, чтобы подвести курсор мышки и кликнуть.
зачем это делать объясните?
Но столкнулся с тем, что в определенные моменты она срабатывает правильно, а на самом деле такого быть не может - объект, который мы нашли находится на слое с z-index=10 и как раз там же находится div со слоем у которого z-index=100.
В итоге скрипт может без труда нажать на объект (к примеру кнопка), а пользователь в жизни просто не увидит ее - он будет видеть верхний слой.
Мне не хватает только одного момента: как найти координаты расположения данного объекта. Хотя бы не расположение xy на экране, а относительно самого документа HTML.
я так и не понял чего же вы хотите?? мб я чегото не знаю, о каких слоях идет реч? :wacko:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ZaEzzz,
Попробуйте _IEPropertyGet() ("browserx", "browsery", "screenx", "screeny" и т.д)
 

shakur

Осваивающий
Сообщения
76
Репутация
24
В ИЕ имеем объект с id='x'
такой вариант не подойдет?
Код:
$oIE = _IECreate("URL")
$oElements = _IETagNameAllGetCollection  ($oIE)
	For $oElement In $oElements
	 if $oElement.id = "x" Then
                  _IEAction ($oElement, "click")
                  _IELoadWait($oIE)
	     exitloop 
	 EndIf
	Next
;...
 

BIOS

Жизнь - игра. График - супер, но сюжет - хреновый.
Сообщения
173
Репутация
69
ZaEzzz
Замени
Код:
_IEAction ($oForClick, "click")

На
Код:
$hIE=_IEPropertyGet($oForSearch,"hwnd")
$oBCR=$oForClick.getBoundingClientRect()
$iElementX=$oBCR.left ;координаты элемента
$iElementY=$oBCR.top ;координаты элемента

WinActivate($hIE)
ControlClick($hIE,'','Internet Explorer_Server1','left',1,$iElementX+3,$iElementY+3) ;поправь под свой браузер
 
Автор
Z

ZaEzzz

Новичок
Сообщения
28
Репутация
2
madmasles, BIOS, огромное спасибо!
Как удастся попробовать сразу сообщу результаты :smile:
shakur, не стоит искать объяснения моим действиям ;)
 
Верх