Automatyzacja myszy i klawiatury
Internet 7th Jan 2010
Jak wiadomo Linux znany jest z tego, że można tutaj zautomatyzować niemalże wszystko. Zazwyczaj robimy to za pomocą skryptów Basha, Perla czy innego Pythona. Są jednak przypadki, kiedy nie bardzo mamy dojście do API czy komend aby zautomatyzować jakiś proces. Bo jak zautomatyzować np. ruch myszy w środowisku graficznym czy zasymulować wciskanie klawiszy?
Drugą rzeczą, z której znany jest Linux jest to, że zawsze znajdzie się rozwiązanie ;-) Podobnie w tym przypadku rozwiązaniem naszym problemów jest pakiet xautomation (spaczkowany w większości dystrybucji). Dostarcza on bardzo pomocnej komendy jaką jest xte. Podstawowymi parametrami tej komendy są:
key k Wciśnięcie klawisza k
keydown k Przytrzymanie klawisza k
keyup k Zwolnienie klawisza k
str string Wpisanie ciągu znaków
mouseclick i Wciśniecie lewego klawisza myszy
mousedown i Wciśniecie lewego klawisza myszy
mouseup i Zwolnienie lewego klawisza myszy
mousemove x y Przemieszczenie kursora na pozycję (x,y)
mousermove x y Względne przemieszczenie kursora na pozycję (x,y)
sleep x Odczekanie x sekund
Dzięki zastosowaniu tych komend możemy już zautomatyzować wyklikiwanie pewnych czynności, np. głupiej ankiety internetowej lub pajacyka. Swojego czasu używałem tego do łączenia się z ukrytą siecią Wifi, której Gnomowy Network Manager za nic nie umiał mi zapamiętać. Zamiast wyklikiwać codziennie szereg opcji i po raz setny wpisywać długie wygenerowane hasło klikałem tylko w skrypt, który robił wszystko za mnie.
Przykładowy skrypt powtarzający pewną czynność w nieskończoność może wglądać tak:
#!/bin/bash
while [ 1 ]
do
sleep 1
xte 'mouseclick 1'
# otwórz Chrome w trybie porno
xte 'keydown Control_L' 'keydown Shift_L' 'key n' 'keyup Shift_L' 'keyup Control_L'
sleep 1
# wybierz adres
xte 'str http://...wybierz_polskiego_polityka_roku_2009...'
xte 'key Return'
# czekamy na wczytanie strony
sleep 7
#wybierz kandydata
xte 'mousemove 44 490'
xte 'mouseclick 1'
# głosuj
xte 'mousemove 253 710'
xte 'mouseclick 1'
sleep 1
# zamknij Chrome
xte 'keydown Alt_L' 'key F4' 'keyup Alt_L'
done
Dla ułatwienie sobie życia możemy skorzystać z komendy xmousepos, dzięki której nie będziemy musieli zgadywać pozycji kursora. Wystarczy ustawić kursor w odpowiednie miejsce a następnie uruchomić podaną komendę aby uzyskać pozycję kursora, np:
tomek@Arch:~$ xmousepos
1125 136 1125 110
^^ dwie pozycje, bo każdy kij ma dwa końce
W każdym razie miło wiedzieć, że mamy możliwość zautomatyzowania kolejnej czynności ;-)
I <3 Linux
Komentarze z jogger.pl
Warto wiedzieć. W przypadku interaktywnych programów tekstowych można natomiast skorzystać z Tcl oraz Expect w celu symulowania obecności użytkownika.
Nigdy bym nie wpadł na to, że to może być takie proste.. ;)
A niech no wyskoczy inne okienko ;D .
polecam użyć cnetworkmanagera (konsolowy klient) zamiast takich kombinacji.
@spinus: to było dawno, dawno temu. Od tego czasu używam Wicd, który łączy się z siecią na etapie startu systemu.
Ciekawy program, kiedyś się z nim spotkałem. Ale do takiej automatyzacji na stronach www wykorzystał bym np. skrypt pythona z urllib/mechanize lub czymś podobnym ;)
Bardzo przydatne informacje, dzięki.
Polecam takze przyjzec sie pakietowi actkbd - pozwala definiowac nie tylko standardowe klawisze ale takze multimedialne. Dziala niezaleznie od x-servera dzieki czemu jestesmy w stanie korzystac z bindow np. w grze
witam. a czy ktoś moglby polecic cos podobnego pod winzgroze?
Przepraszam ale Wojtek usunąl linki, czy móglbyś podać je tutaj lub na jacekd6@wp.pl z góry dzięki