前回に続いて、xautomationによるマウス&キーボードの操作方法を記します。
それとブラウザ・Iceweasel(Firefox)を利用して、とあるサイトからファイルをダウンロードしてくるスクリプトを紹介します。
リンク集
xautomation
Gnome デスクトップ キーボード操作
Iceweasel(Firefox) キーボード操作
ディスプレイ番号について
ディスプレイ番号については前回記載したので割愛します。xmousepos コマンド
返り値は X Y U V の形式でマウスカーソルのウィンドウ位置を返します。なので、(X-U, Y-V)は真下ウィンドウの左上角の絶対位置を表します。
xte コマンド
man xte の表示に補足する形で説明します。key k
Press and release key k キーを押して離します。keydown k
Press key k down キーを押しっぱなしにします。keyup k
Release key k キーを離します。str string
Do a bunch of key X events for each char in stringフォーカス位置に文字列を入力します。
mouseclick i
Click mouse button i マウスボタンを押して離します。i の値は以下のように対応しています。ダブルクリックは1を2回で実現します。mousemove x y
Move mouse to screen position x, y 絶対位置へ移動します。mousermove x y
Move mouse relative from current location by x, y 相対的に移動します。マイナス値の指定で左や上へ移動可能です。mousedown i
Press mouse button i down マウスボタンを押しっぱなしにします。mouseup i
Release mouse button i マウスボタンを離します。sleep x
Sleep x secondsusleep x
Usleep x microseconds利用できるキー
基本
固有
スクリプト例
ブラウザを起動してページ遷移し、ファイルを保存する例です。実行する前にIceweaselのショートカットを作成しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
#!/bin/bash ############################################################################### # # 概要 # # xautomationのテストスクリプトです。 # # Iceweasel(Firefox)を用いて、Drecomのホームページの # 投資家情報から最新PDFをダウンロードします。 # 事前にIceweaselのショートカットをデスクトップの4アイコン目に作成しておきます。 ############################################################################### # # 設定 # # # ディスプレイ設定 # export DISPLAY=:0 XTE="xte -x$DISPLAY" XPOS="xmousepos" # # 固定の幅や高さ # DISPLAY_HEAD_BAR_Y=25 # # マウスポジション # ICEWEASEL_ICON_ABS_POS="87 333" # URL DRECOM_URL="http://drecom.co.jp/" ############################################################################### # # 実行 # # 全てのウィンドウを隠す $XTE "keydown Alt_L" "keydown Control_L" $XTE "key d" $XTE "keyup Alt_L" "keyup Control_L" # Iceweaselを起動 $XTE "mousemove $ICEWEASEL_ICON_ABS_POS" $XTE "mouseclick 2" sleep 3 # 画面を最大化 $XTE "key F11" # Drecomページへアクセス $XTE "keydown Alt_L" $XTE "key d" $XTE "keyup Alt_L" $XTE "str $DRECOM_URL" $XTE "key Return" sleep 3 # 投資家情報へ移動 for i in `seq 8` do $XTE "key Tab" done $XTE "key Return" sleep 3 # 最新のPDFをダウンロード for i in `seq 19` do $XTE "key Tab" done $XTE "keydown Alt_L" $XTE "key Return" $XTE "keyup Alt_L" sleep 3 # Iceweaselを終了する $XTE "key Escape" $XTE "keydown Control_L" $XTE "key q" $XTE "keyup Control_L" exit 0 |
実行して確認します。VNC Viewerで見ていると、ブラウザが立ち上がって、ページ遷移して、ダウンロードして、お片づけしてくれます。
1 2 3 4 5 |
vim xte_test_get_file.sh chmod +x xte_test_get_file.sh ./xte_test_get_file.sh ls -l ~/ダウンロード/ |
ブラウザを閉じるにも色々手段があり、カーソルを動かして×ボタンを押すよりは Ctrl+Q の方が断然正しいですし、フォーカスのリンク先をダウンロードするにも、Enterを押してから色々選んで保存したり、右クリックして(K)を押して名前をつけて保存に進むよりも、Alt+Enter の方がシンプルです。
上記例ではブラウザの起動をマウスカーソルで行なっていますが、直接コマンドで起動した方が安定しそうです。
1 |
DISPLAY=:0 /usr/lib/iceweasel/firefox-bin -a iceweasel https://google.co.jp/ |
なんでもできてしまう反面、いかに確実性のある内容にするか、デザインやメニュー変更に対してどう耐性をつけるか、例外検知はどうするか、といったことが作り手のセンスにかかってきます。
そうそう採用する機会はないと思いますが、WebScrapingと合わせて利用場面を選択すると、より複雑な要件を満たしたり、汎用性を高くできるのではないでしょうか。