Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2012, 06:44   #1
als999
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 17
По умолчанию Вызов браузера из VB и эмуляция нажатия левой клавиши мыши в определенном месте

Доброго времени суток уважаемые форумчане.
Я работаю в организации, в которой очень много сотрудников, а столовая одна на всех.

Очередь в столовую формируется электронно: в определенное время (в 9:00:00) на веб-странице (доступной только через внутреннюю сеть) в определенном месте появляется кнопка "Записать в очередь" (кнопка появляется без перезагрузки страницы).

Пользователи со всех подразделений начинают нажимать эту кнопку (как правило начинают нажимать на место, где должна появиться кнопка, за пару секунд до ее появления, и жмут много раз с максимальной частотой).

В течение около 10-30 секунд после наступления 9:00:00 на веб странице крутится значок "ожидание" (который обычно появляется, когда в браузере нажал на ссылку, но страница еще не загрузилась). После загрузки страницы все видят очередность похода подразделений на обед.

Я не знаю почему, но нашему подразделению редко когда получается записаться раньше 3-го десятка, поэтому к приходу в столовую еды уже мало, она остывшая, да и ко времени похода в столовую уже ни о чем, кроме как о еде, не думается ...

Хотелось бы попробовать исключить человеческий фактор при нажатии на кнопку записи. Из доступных на моем рабочем месте инструментов, которые могут автоматизировать процесс записи - только Excel с VB.

Как я представляю, можно в процедуре VB написать программу по следующему алгоритму:
___________________________
1. активировать браузер
2. перевести курсор мыши на место, где появляется кнопка записи в очередь
3. эмулировать нажатие левой клавиши мыши на текущем положении курсора с периодичностью, например, 10 миллисекунд в течение 10 секунд.
___________________________

Как пройти первый шаг - понятно (AppActivate "Очередь в столовую"), а вот как реализовать шаги 2 и 3 - не смог найти.

Прошу вашей помощи.
als999 вне форума Ответить с цитированием
Старый 04.07.2012, 07:56   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Приветствую!
Зачем переводить курсор у кнопки есть событие Click
Вот его и нужно обработать
Вот пример захода на mail.ru
Код:
Sub AutomateIE()
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    ie.navigate ("mail.ru")
    
    Do Until ie.ReadyState = 4 'For STATE as COMPLETE
        DoEvents
    Loop
  
    ie.document.getelementbyID("mailbox__login").Value = "*************"
    ie.document.getelementbyID("mailbox__password").Value = "**********"
    ie.document.getelementbyID("mailbox__auth__button").Click
    
End Sub
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 04.07.2012, 09:56   #3
als999
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 17
По умолчанию

Watcher_1, спасибо за оперативный ответ.
В коде страницы код для кнопки такой: <button id="Record" type="submit" title="Записать в очередь" ...>Записать</button>
Значит, мне вместо ie.document.getelementbyID("mailbox __auth__button").Click из вашего примера нужно написать ie.document.getelementbyID("Record" ).Click?
als999 вне форума Ответить с цитированием
Старый 04.07.2012, 10:10   #4
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Получается так...
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 04.07.2012, 10:21   #5
als999
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 17
По умолчанию

Проверить работу макроса пока не могу, т.к. запись открыта в течение часа (с 9:00:00 до 10:00:00), после чего кнопка записи скрывается с экрана.
После проверки отпишусь.
als999 вне форума Ответить с цитированием
Старый 04.07.2012, 12:05   #6
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

als999, чтобы проверить, Вам необходимо знать ID (или что-то еще) нужных Вам элементов.

Watcher_1, как я себе это представляю:
1. создаем объект IE
2. заходим на нужную страницу
3. используя таймер браузера [setInterval], проверяем появился ли нужный нам элемент через n миллисекунд.
4. как только его обнаружили, кликаем
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 04.07.2012, 12:59   #7
als999
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 17
По умолчанию

nerv, в приведенном мною выше примере кода страницы, ID кнопки, как я понимаю, Record?

Шаги алгоритма 1, 2 - теже что и в коде Watcher_1, а вот 3-4 как реализовать?
als999 вне форума Ответить с цитированием
Старый 05.07.2012, 06:27   #8
als999
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 17
По умолчанию

Watcher_1, код в целом работает, но в таком виде задачу не решает. Причина - в момент загрузки IE перед 09:00:00 сервер висит и страница не успевает загрузиться. Т.е. нужно чтобы IE загружался заранее, а программно нужно только нажать кнопку.
Вопрос в том, как после активации IE (кодом AppActivate "Очередь в столовую") обратиться к элементу с id Record?
als999 вне форума Ответить с цитированием
Старый 05.07.2012, 10:35   #9
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Пробуем такой вариант НО Internet Explorer должен быть запущен и страница загружена
Код:
Dim ShellApp
Set ShellApp = CreateObject("Shell.Application")
Dim ShellWindows
Set ShellWindows = ShellApp.Windows()
Dim i
For i = 0 To ShellWindows.Count - 1
    If InStr(ShellWindows.Item(i).FullName, "iexplore.exe") <> 0 Then
        Set ie = ShellWindows.Item(i)
    End If
Next
'MsgBox ie.LocationURL
ie.document.getelementbyID("mailbox__login").Value = "********"
ie.document.getelementbyID("mailbox__password").Value = "*********"
ie.document.getelementbyID("mailbox__auth__button").Click
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 06.07.2012, 06:24   #10
als999
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Watcher_1 Посмотреть сообщение
Пробуем такой вариант
вариант рабочий, только вместо
Код:
InStr(ShellWindows.Item(i).FullName, "iexplore.exe")
нужно ввести
Код:
InStr(ShellWindows.Item(i).FullName, "Internet Explorer")
Но записаться все равно не удалось
Я кнопку нажимаю в цикле, и видимо он бежит слишком часто, что кнопка не успевает отобразиться. Нужно либо ставить задержку между нажатиями (например, таймером, или вторым внутренним циклом), либо дожидаться наступления 09.00:00 и тогда начинать нажимать. Думаю, второй вариант более надежен.

А как сделать, чтобы часть кода, в которой нажимается кнопка, запускалась ровно в 09:00:00?
als999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
эмуляция нажатия клавиши F Vitek_DeadlyHunter Общие вопросы Delphi 3 03.11.2011 12:44
Как имитировать клик мыши в определенном месте в браузере iukash Qt и кроссплатформенное программирование С/С++ 5 17.02.2011 15:28
Эмуляция нажатия клавиши helenfly Win Api 9 01.12.2009 12:09
Эмуляция нажатия клавиши...... Zoidberg Win Api 4 11.01.2007 18:44