+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 93.29 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Автоматизируем щелчки мышкой в Linux: xdotool

07.03.2014 11:09
MaGIc2laNTern

Эта очень короткая заметка на примере активации ключей в Steam описывает процесс автоматизации операций, выполняемых при помощи мыши и клавиатуры.

Допустим, вы купили несколько наборов игр Humble Bundle. Теперь у вас есть, например, 5 ключей для активации в Steam. А может быть 15 или даже 25. Вы очень не хотите активировать их вручную, потому что это слишком муторно: в клиенте Steam нужно каждый раз наводить курсор на меню "Games", щёлкать, потом наводить курсор на пункт меню "Activate a Product on Steam…", опять щёлкать, потом нажимать Enter, потом ещё раз Enter, и только затем наконец-то вводить ключ (а потом нужно подождать, ещё раз нажать Enter, затем Escape). А потом повторять то же самое для каждого последующего ключа. Как писал Леонид Каганов, стоило ли вообще ради такого "прогресса" спускаться с пальмы и брать в руки каменный топор?

В общем, вы решили этот процесс автоматизировать - тем более, что задача-то, на самом деле, очень простая. Для её решения нам потребуются консольные утилиты xdotool и xclip - убедитесь, что они установлены у вас в системе.

Для начала вы собираете ключи с веб-страницы, чтобы затем записать их в текстовый файл, по одному на строку. Естественно, не вручную. Например, со страницы Humble Budle их можно собрать, выполнив через JS-консоль что-нибудь в таком духе:

$("div.keyfield:visible").each(function() {console.log($(this).text())});
Получается текстовый файл с примерно таким содержимым:

9MZ43-42XXZ-0B9X3 I4YYK-CRGVN-VHXCR NQJ6E-GJWNG-GZWVX YCKI8-I0B9T-85CM4 KBFHW-5LE39-WHFMW WFLWX-PPRBT-ZCGAN ER26C-XFT5C-2NDGG J876-XPFC-H0SF-KGMO 37YZQ-93TCM-V9MBY 2GFNA-XHBME-3MB70
При сохранении текстового файла убедитесь, что в конце есть перенос строки (некоторые текстовые редакторы не добавляют его автоматически). Иначе при выполнении скрипта последний ключ не будет активирован.

Далее вам нужно открыть Steam и определить координаты тех точек, куда нужно будет автоматически перемещать курсор. Таких точек две: во-первых, точка для первого щелчка (меню "Games"), во-вторых, точка для второго щелчка (пункт меню "Activate a Product on Steam…"). Тут по настроению - можете получить координаты с помощью команды getmouselocation, а можете их подобрать.

В первом случае можно либо запустить xdotool через watch (для автоматического перевыполнения команды через определённый интервал времени), либо добавить sleep.

То есть либо запускаете watch xdotool getmouselocation и наводите курсор на нужное место экрана, посматривая при этом в консоль и запоминая значения нужных точек, либо запускаете xdotool sleep 5 getmouselocation и получаете координаты той точки, где курсор оказывается через 5 секунд после запуска команды (соответственно, смотреть в консоль или запоминать координаты не нужно - достаточно будет просто успеть поместить курсор в нужное место, и уже потом переключиться к консоли).

Во втором случае вы пишете, допустим, xdotool mousemove 52 38, выполняете, смотрите, где оказался курсор, а потом меняете числа, пока не найдёте подходящие. Этот вариант более весёлый, поэтому, думаю, многие предпочтут сделать именно так.

Теперь, когда у нас есть нужные координаты, давайте действовать итеративно: прежде всего попробуем автоматически пройти до момента ввода ключа.

Для этого будем использовать команды mousemove, click, sleep и key. Список команд, кстати, можно посмотреть в документации по xdotool.

Давайте попробуем:

xdotool mousemove 210 105 click 1 mousemove 210 160 sleep 0.1 click 1 sleep 0.1 key Return sleep 0.1 key Return

Если в точке, куда в первую очередь перемещается курсор, не Steam, а какое-то другое окно (например, если Steam скрыт за окном терминала), то нужно добавить команды windowactivate/windowfocus, чтобы сначала отобразилось окно Steam, и уже затем выполнялись следующие команды.

Например:

steam_window=48234551 ; xdotool windowactivate $steam_window windowfocus $steam_window sleep 0.5 mousemove 210 105 click 1 mousemove 210 160 sleep 0.1 click 1 sleep 0.1 key Return sleep 0.1 key Return

Чтобы получить идентификатор активного окна, вы можете использовать команду getactivewindow (если окно Steam будет активно через секунду после выполнения команды xdotool sleep 1 getactivewindow, то в консоли отобразится его идентификатор). Кроме того, для команды getmouselocation (см. выше) также указывается идентификатор окна, над которым находится курсор.

Теперь давайте попробуем написать небольшой скрипт, который читает файл с ключами и поочерёдно их активирует.

Скрипт можно назвать, например, activate_steam_keys.sh.

#!/bin/bash commands=( "sleep 1" "mousemove 210 105" "click 1" "mousemove 210 160" "sleep 0.1" "click 1" "sleep 0.1" "key Return" "sleep 0.1" "key Return" "sleep 0.1" "key ctrl+v" "sleep 0.5" "key Return" "sleep 10" "key Return" "sleep 0.5" "key Escape" ) while read key do echo -n $key / xclip -selection c xdotool ${commands[*]} done < $1
Разрешаем для файла выполнение и запускаем скрипт. При этом передаём скрипту аргумент - имя файла с ключами.

chmod +x activate_steam_keys.sh
./activate_steam_keys.sh steam_keys.txt

А дальше просто смотрим на экран и наслаждаемся процессом. Всё-таки хорошая идея была взять тот каменный топор.

Весёлого программирования!

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года