Что нового

Кликнуть по скроллу в IE

Suppir

Продвинутый
Сообщения
967
Репутация
62
Добрый день!

1. Открываю в IE сайт: http://base.consultant.ru/regbase/cgi/online.cgi?req=home&utm_csource=online&utm_cmedium=button#div

2. Кликаю по ссылке "Москва Проф".

3. Далее мне нужно с помощью AutoIt пролистать полученный список документов вниз.
ControlSend не подходит, поскольку нужно делать эту операцию в фоновом режиме, когда программа может быть не в фокусе.

То есть, нужно виртуально кликать по элементу "скролл" через библиотеку IE.au3. Но не получается :( Подскажите, плиз.
 

tref777

Новичок
Сообщения
38
Репутация
2
Я бы так сделал
Код:
$oIE = ObjCreate("InternetExplorer.Application")
$oIE.visible = True
$oIE.navigate("http://base.consultant.ru/regbase/cgi/online.cgi?req=home&utm_csource=online&utm_cmedium=button#div")
sleep(1000)
$o_cellarContainer = $oIE.document.getElementById('cellarContainer')
$o_tbody = $o_cellarContainer.getElementsByTagName('tbody')
$o_span = $o_tbody.item(0).getElementsByTagName('span')
$o_span.item(3).click()
sleep(10000)
$o_listContainer = $oIE.document.getElementById('listContainer')
$o_evt = $oIE.document.createEvent('MouseEvents');
$o_evt.initEvent("mousewheel", true, true);
For $i = 0 To 10
	$o_listContainer.dispatchEvent($o_evt)
	sleep(100)
Next
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Спасибо за попытку.

Открывается сайт, потом открывается нужный список документов. Однако список автоматически не скроллится вниз.

У меня стоит Windows 10 и AutoIt 3.3.8.1.



Добавлено:
Сообщение автоматически объединено:

Я думаю, а можно ли как-то программно кликать по нижней кнопке скролла? Например, видно, что скролл - это элемент с ID = scrollbar.

Код:
<div id="scrollbar" style="width: 19px; height: 470px; display: block; -ms-overflow-y: scroll;"><div id="scrollbarSize" style="height: 1000000px; _border-left: solid 1px #ffffff;"></div></div>

Может быть, можно как-то вызвать действие на этот элемент scrollbar (кликнуть по нижней его кнопке)? Но только эта кнопка сама не выделена в отдельный элемент, как я понял.


Добавлено:
Сообщение автоматически объединено:

Проверил скрипт также на Windows 7. Просто загрузился сайт, по ссылке на "Москва Проф" не было перехода. В консоли скрипт написал:
C:\69\ie.au3 (12) : ==> The requested action with this object has failed.:
$o_listContainer = $oIE.document.getElementById('listContainer')
$o_listContainer = $oIE.document^ ERROR
 

tref777

Новичок
Сообщения
38
Репутация
2
А если так?
Код:
$oIE = ObjCreate("InternetExplorer.Application")
$oIE.visible = True
$oIE.navigate("http://base.consultant.ru/regbase/cgi/online.cgi?req=home&utm_csource=online&utm_cmedium=button#div")
Do
	$o_cellarContainer = $oIE.document.getElementById('cellarContainer')
	sleep(100)
Until IsObj($o_cellarContainer) == 1
$o_tbody = $o_cellarContainer.getElementsByTagName('tbody')
$o_span = $o_tbody.item(0).getElementsByTagName('span')
$o_span.item(3).click()
Do
	$o_listContainer = $oIE.document.getElementById('listContainer')
	sleep(100)
Until IsObj($o_listContainer) == 1
$o_evt = $oIE.document.createEvent('MouseEvents');
$o_evt.initEvent("mousewheel", true, true);
For $i = 0 To 100
    $o_listContainer.dispatchEvent($o_evt)
    sleep(10)
Next



Добавлено:
Сообщение автоматически объединено:

У меня мой пример вроде как пашет.



Добавлено:
Сообщение автоматически объединено:

этот див
Код:
<div id="listContainer" style="width: 100%; overflow: hidden; height: 326.2px;" stnum="" defst="0">
реагирует на событие DOMMouseScroll, keydown, mousewheel, симулировав которые, можно прокрутить вниз.


Добавлено:
Сообщение автоматически объединено:

Еще IE обнови до 11, может из-за этого не работать
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Получается точно такое же поведение, как и предыдущего скрипта. В Windows 10 запускается, открывается сайт, потом список документов, далее ничего не происходит.
В Window 7 просто открывается сайт, далее ничего, в консоли запись:

C:\69\ie1.au3 (7) : ==> The requested action with this object has failed.:
$o_cellarContainer = $oIE.document.getElementById('cellarContainer')
$o_cellarContainer = $oIE.document^ ERROR

строка 7 это:
$o_cellarContainer = $oIE.document.getElementById('cellarContainer')
на ней ошибка.


Добавлено:
Сообщение автоматически объединено:

Короче, я еще попробовал на c# написать. Там можно прямо внутри программы вызывать IE как объект. Если окно активно, то можно отправлять SendKeys. Если окно приложения не активно, тогда получилось сделать только через Windows API функцией PostMessage. Предварительно нужно найти хендлер окна и дочерней формы, куда постить этот самый Message.

Код:
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, int Msg, Keys wParam, IntPtr lParam);
 
A

Alofa

Гость
Suppir сказал(а):
... ControlSend не подходит, поскольку нужно делать эту операцию в фоновом режиме ...
Ну и делайте на здоровье...

Код:
#include <IE.au3>

$oMOB = _IECreate('http://base.consultant.ru/regbase/cgi/online.cgi?mb=MLAW;req=query;div=LAW;sb=MLAW;ts=66106885118927110218605818226933;SEM=-;NOQUERYLOG=1')
$hWinHandle = HWnd($oMOB.hWnd) ; Получаем Handle окна
ControlSend($hWinHandle, '', '[CLASS:Internet Explorer_Server; INSTANCE:1]', '{END}') ; Строка будет выслана именно в наше окно, независимо от его состояния
 
Верх