Что нового

скрол окна IE до нужного элемента

kaa936

Новичок
Сообщения
10
Репутация
2
Всем Привет!
вопрос по сабжу.
Скрипт работает в большом окне и когда заполняемые объекты уходят за пределы видимости, перестают срабатывать валидаторы, которые к ним привязаны. Сейчас кручу окно TAB'ом, но это крайне плохой способ, так как страница написана через Ж...пу и фокус постоянно улетает в меню IE, и каждый раз приходиться начинать крутить с первого элемента, а поскольку элементы еще и динамически создаются, то приходиться танцевать с бубном.
Есть ли способ взять элемент и проскролить станицу, чтобы он попал в область видимости (идеально на самый верх)?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Или (подсмотрел в одной из последних бет)
Код:
$oObj.scrollIntoView()

Код:
#include <IE.au3>

$oIE = _IECreate('http://autoit-script.ru/index.php/topic,14255')
$oImgs = _IEImgGetCollection($oIE)
For $oImg In $oImgs
	$oImg.scrollIntoView()
	Sleep(500)
Next
 
Автор
K

kaa936

Новичок
Сообщения
10
Репутация
2
Спасибо огромное!
просто не так строил поисковые запросы )
 

joparezzz

Новичок
Сообщения
65
Репутация
0
а как проскроллить до определенного элемента, у которого известен Id или value???
 
Автор
K

kaa936

Новичок
Сообщения
10
Репутация
2
Код:
$oInputs = _IETagNameGetCollection($oIE, 'input') ; коллекция контролов инпут 
For $oInput In $oInputs
    If StringInStr($oInput.attributes.getNamedItem('id' ).nodeValue, 'тут его ID') Then 
$oInput.scrollIntoView()  ; скролим его вверх 
		        ExitLoop
    EndIf
 Next
 

joparezzz

Новичок
Сообщения
65
Репутация
0
спасибо большое)))
а если скроллить надо не вверх, а в середину окна, то как?
 
Автор
K

kaa936

Новичок
Сообщения
10
Репутация
2
скролить элемент который выше этого
 

joparezzz

Новичок
Сообщения
65
Репутация
0
я записал:
Код:
scrollIntoView(0, 0)

получилось, что элемент скроллится на левый нижний угол, в принципе и так нормально)))
 

joparezzz

Новичок
Сообщения
65
Репутация
0
Код:
$sText = _IEBodyReadText($oIE)
		If StringInStr($sText, "Некий текст") Then
			MsgBox(64, 'Info', 'Есть такой текст')
		Else
			MsgBox(64, 'Info', 'Нет такого текста')
		EndIf

А как скроллить до текста если он есть???
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
joparezzz [?]
А как скроллить до текста если он есть???
Код:
#include <IE.au3>

Local $sTextToFind = 'А как скроллить до текста если он есть???'

$oIE = _IECreate('http://autoit-script.ru/index.php/topic,14255')
$oTextRange = $oIE.document.body.createTextRange()
$oTextRange.moveStart("character", -1)
$oTextRange.findText($sTextToFind)
$oTextRange.select()
$oTextRange.scrollIntoView()
 

joparezzz

Новичок
Сообщения
65
Репутация
0
спасибо все работает)))
а можно ли реализовать, чтоб и курсор мыши наводился на найденный текст???
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
joparezzz [?]
а можно ли реализовать, чтоб и курсор мыши наводился на найденный текст
Можно, но возни много. Это связано с тем, что координаты элементов имеют офсеты относительно друг друга плюс нужно учитывать скроллинг и т.д. и т.п. Если вам интересно, попробуйте.
 

joparezzz

Новичок
Сообщения
65
Репутация
0
я тут начал создавать программу антиспам для Авито.
Код:
#include <IE.au3>
$oIE = _IECreate('http://www.avito.ru/moskva/odezhda_obuv_aksessuary/sumka_vlieger_vandam_guardian_angel_soft_196850358')
_IELoadWait($oIE)

			$oLabels = _IETagNameGetCollection($oIE, 'span') 
		For $oLabel In $oLabels
				If StringInStr($oLabel.attributes.getNamedItem('id' ).nodeValue, 'send_abuse') Then
				$oLabel.scrollIntoView(0,0) 
				_IEAction($oLabel, "click")
				ExitLoop
				EndIf
			Next
_IELoadWait($oIE)

			$oLabels = _IETagNameGetCollection($oIE, 'span')
		For $oLabel In $oLabels
				If StringInStr($oLabel.attributes.getNamedItem('data-id' ).nodeValue, '71') Then
				$oLabel.scrollIntoView(0,0)  
				_IEAction($oLabel, "click")
				ExitLoop
				EndIf
			Next

На кнопку "Пожаловаться" нажимается, а как нажать на "Спам или реклама"?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
joparezzz,
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Верх