Страницы: 1 2 След.
RSS
Вызов браузера из VB и эмуляция нажатия левой клавиши мыши в определенном месте
 
Доброго времени суток уважаемые форумчане.  
Я работаю в организации, в которой очень много сотрудников, а столовая одна на всех.  
 
Очередь в столовую формируется электронно: в определенное время (в 9:00:00) на веб-странице (доступной только через внутреннюю сеть) в определенном месте появляется кнопка "Записать в очередь" (кнопка появляется без перезагрузки страницы).  
 
Пользователи со всех подразделений начинают нажимать эту кнопку (как правило начинают нажимать на место, где должна появиться кнопка, за пару секунд до ее появления, и жмут много раз с максимальной частотой).  
 
В течение около 10-30 секунд после наступления 9:00:00 на веб странице крутится значок "ожидание" (который обычно появляется, когда в браузере нажал на ссылку, но страница еще не загрузилась). После загрузки страницы все видят очередность похода подразделений на обед.  
 
Я не знаю почему, но нашему подразделению редко когда получается записаться раньше 3-го десятка, поэтому к приходу в столовую еды уже мало, она остывшая, да и ко времени похода в столовую уже ни о чем, кроме как о еде, не думается ...  
 
Хотелось бы попробовать исключить человеческий фактор при нажатии на кнопку записи. Из доступных на моем рабочем месте инструментов, которые могут автоматизировать процесс записи - только Excel с VB.  
 
Как я представляю, можно в процедуре VB написать программу по следующему алгоритму:  
___________________________  
1. активировать браузер  
2. перевести курсор мыши на место, где появляется кнопка записи в очередь  
3. эмулировать нажатие левой клавиши мыши на текущем положении курсора с периодичностью, например, 10 миллисекунд в течение 10 секунд.  
___________________________  
 
Как пройти первый шаг - понятно (AppActivate "Очередь в столовую"), а вот как реализовать шаги 2 и 3 - не смог найти.  
 
Прошу вашей помощи.
 
забавная ситуация : ) Могу попытаться Вам помочь за небольшое вознаграждение.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Технологии бьются за еду! :)  
Что в общем уже давно так и есть...  
Что противопоставят конкуренты? Наймут хакеров для корректировки итоговых результатов? :)
 
nerv, небольшое - это какое? 100 руб на пиво я бы и так перечислить, а если больше - оно того не стоит :)  
 
hugo, я подозреваю, что в остальных отделах программно записываются, т.к. при ручной записи нам не удается войти даже в двадцатку.
 
Чтож это за передовое предприятие, где почти все отделы смогли это автоматизировать? Молодцы :)  
Кстати, вопрос уже почти решился на programmers, т.е. направление и подходы обозначены :)
 
Не только лень двигатель прогресса, но ещё и голод :)
 
Да, подходы обозначены, завтра проверю работу.  
Единственно, остаются вопросы (не совсем понимаю, как это должно сработать).  
Но если сработает, то принцип работы не принципиален :) (я не программист, и для проф. деятельности мне эти знания не совсем полезны)
 
>>...к приходу в столовую еды уже мало, она остывшая, да и ко времени похода в столовую уже ни о чем, кроме как о еде, не думается...  
Точно по Павлову (администратор сайта ни при чем). Заветная кнопочка в клетке :)  
Не проще ли создать обычный график посещения?  
 
>>Могу попытаться Вам помочь за небольшое вознаграждение.  
Тоже кушать хочется? :)
 
Но вкусно покушать ведь полезно для проф.деятельности? Значит и эти знания полезны :)  
 
По тому коду конкретно ничего не скажу - мало дела имел с IE. Думаю, нужно кнопку жать в цикле пока не нажмётся.  
И ещё возможно нужно программно сперва обновить страницу. А может и не нужно...
 
По поводу цикла - это понятно, сделаю.  
А вот обновление страницы не требуется, кнопка появляется без обновления.  
 
По поводу обычного графика посещения - не вариант, многие против, т.к. кому-то постоянно нужно будет быть в конце очереди со всеми вытекающими недостатками.  
 
Да, все по Павлову, рефлексы уже выработаны :)
 
{quote}{login=als}{date=04.07.2012 06:46}{post}Очередь в столовую формируется электронно: в определенное время (в 9:00:00) на веб-странице (доступной только через внутреннюю сеть) в определенном месте появляется кнопка "Записать в очередь" {/post}{/quote}Задачу нужно менять кардинально: ключевое здесь - "в определённом" месте. Предлагаю сделать так: кнопка всегда выскакивает в разных местах страницы, а только Ваш отдел знает, где и в какой момент времени она появится :-)
 
Программисты у нас честные (ну я так думаю), записываются в общем порядке, и не всегда попадают даже в первую 10-ку :)  
 
Господа, развели тут флейм, понимаешь, а решение задачи так и не предложено :(
 
Продублировать то, что предложено на programmers?
 
{quote}{login=als}{date=04.07.2012 11:44}{thema=}{post}развели тут флейм, понимаешь, а решение задачи так и не предложено :({/post}{/quote}А чем вариант nerv не устраивает? Хороший вариант. Я бы сам сделал аналогично.
 
ответил здесь   
http://programmersforum.ru/showthread.php?t=206776  
 
als, 100 руб. не серьезно : )  
к ста рублям коэффициент нужен 2 или 3 например : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Относительно полученного алгоритма - да, помогли, спасибо. Но помогли, кстати, не на этом форуме, а на другом, и при этом там человек ни слова не сказал про оплату. В общем, у всех свои подходы к помощи на форумах. И я кстати не осуждаю, это вполне нормально :)
 
Я вот никак не пойму: на другом форуме помогли? В чём теперь проблема?
 
Юрий М, на http://programmersforum.ru/showthread.php?t=206776 дали код, который при небольшой доработке должен решить задачу.    
Проверка будет завтра.
 
Такое, только с IE работает?  
 
Вообще я изголялся и макросом открывал exe нарисованный в autoit в ней открывался новый адрес, указывались координаты куда кликать и записывать и время задержки  
 
В autoit всё просто довольно таки mouseclick(x, y, "left")
 
Эх, пол темы потерли. Хоть и флуд, но тема была поднята актуальная.  
 
Относительно решения поставленной в заголовке задачи. Автоматизировать запись удалось без использования VBA (сам не смог допилить макрос до идеала, и никто не помог, в итоге бросил, пошел другим путем).  
 
Другой путь - использование макроса в браузере (макрос записал с использованием плагина iMacros, плагин доступен для Firefox и Chrome).    
 
Но все-таки может кто подкинет идею, как доработать макрос VBA (предполагаю, что такая запись будет более оптимальна). Как сделать запуск определенного кода процедуры ровно в 09:00:00.
 
Почитайте справку по ontime.
Я сам - дурнее всякого примера! ...
 
KukLP, спасибо за совет, почитаю.
 
Набрал в поиск "Макрос по расписанию" - нашёл вот это  http://www.planetaexcel.ru/forum.php?thread_id=4933
 
Как макрос по расписанию запустить - уже понял, но это не совсем то, что нужно.    
Вопрос мой был "Как сделать запуск определенного кода процедуры ровно в 09:00:00?".  
Пример процедуры:  
Sub rec01()  
 
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, "Internet Explorer") <> 0 Then  
       Set ie = ShellWindows.Item(i)  
   End If  
Next  
ie.document.getelementbyID("login").Value = "***"  
ie.document.getelementbyID("password").Value = "***"  
ie.document.getelementbyID("profile.send").Click  
 
End Sub  
 
Мне нужно, чтобы в определенное время запускался только код, который начинается с    
ie.document.getelementbyID("login").Value = "***"  
 
Если я весь макрос запускаю в определенное время, то теряю где-то полсекунды, в моем случае это много.    
 
Как сделать выделение части кода, который начинается с    
ie.document.getelementbyID("login").Value = "***"  
я не знаю, пробую, но не получается.
 
>Как макрос по расписанию запустить - уже понял, но это не совсем то, что нужно.    
если вы не умеете обращаться с инструментом, это еще не значит, что он плох.  
 
>Как сделать выделение части кода, который начинается с я не знаю, пробую, но не получается  
вынести ее в отдельную процедуру/функцию  
 
Я не понимаю, зачем Вам ontime. Даже если "часы" клиента и сервера синхронизированы. Все равно не понимаю.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=als}{date=09.07.2012 09:45}{thema=}{post}Если я весь макрос запускаю в определенное время, то теряю где-то полсекунды, в моем случае это много. {/post}{/quote}  
1. Формулируйте вопрос нормально, тогда и ответы будут "в цель"  
2. Запускайте макрос немного раньше.  
3. Запишите для ЭТИХ целей ДРУГОЙ макрос - без "лишних" строк.
 
запускайте основной макрос по расписанию (используя ваш код или через vbs в связке с планировщиком) в 8:59 строки кода с авторизацией заключите в условие  
x = 0  
n = Date() + timevalue("9:00:00")  
While x =0  
if datediff("n", Now, n) =0 then 'если 9.00 то    
x=1  
ie.document.getelementbyID("login").Value = "***"  
.....  
End if  
wend
 
Юрий М, nerv, не совсем понимаю ваши комментарии. Вроде задаю конкретные вопросы, на которые получаю эмоциональные ответы. Если не хотите говорить по существу - лучше ничего не писать. VBA Excel я не владею, о чем писал ранее, но я никогда не писал, что инструмент плохой.    
 
Неназванному форумянину, написавшему чёткий ответ на мой (получается понятный) вопрос - большое спасибо.    
 
Предлагаю тему закрыть.
 
Что эмоционального в моих сообщениях? Был вопрос: "Как сделать запуск определенного кода процедуры ровно в 09:00:00" - был ответ.    
А вот это: "определенного кода процедуры" - я и просил формулировать нормально.  
Всё сказанное мною - как раз по существу Вашего вопроса. И позвольте мне самому решать - писать или не писать.
 
>на которые получаю эмоциональные ответы  
заблуждаетесь  
 
>Предлагаю тему закрыть.  
поддерживаю. Вам неоднократно отвечали по существу, в т.ч. и в т.н. "эмоциональных ответах"
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1 2 След.
Читают тему
Loading...