在Linux中模擬擊鍵和鼠標移動
- `
你是否曾經(jīng)擁有一個夢- ——你的計算機
- 可以自動為你干活?
- 或許,并非因為
- 你剛看了終結(jié)者。
- 然而,除此之外
- 腳本和任務自動化
- 是每個高級用戶追尋的夢
- 如果今天
- 有許多的解決方案
- 可以滿足這個目標
- 那么
- 有時候
- 就難以從那眾多之中采擷那
- 簡潔、聰明而又高效的一個
- 我
- 不能假裝
- 是我自己發(fā)現(xiàn)了它
- 而與此同時
- 卻偏愛著那個
- 整潔的軟體——xdotool
- 其方法是如此直觀
- 正如它作為X11自動化工具的表露
- 轉(zhuǎn)換思想
- xdotool可以通過讀取文本文件
- 模擬擊鍵的旋律
- 以及鼠標的曼舞
`
讓Xdotool在Linux定居
對于Ubuntu,Debian或者Linux Mint,你能夠只做:
- $ sudo apt-get install xdotool
對于Fedora,請使用yum命令:
- $ sudo yum install xdotool
對于CentOS用戶,可以在EPEL repo中找到該包。在啟用EPEL倉庫后,只要使用上面的yum命令就可以達成你的愿望。
對于Arch用戶,可在Community倉庫中找到該包:
- $ sudo pacman -S xdotool
如果你還是找不到你的發(fā)行版的對應xdotool,你可以從它的官方站點下載。
Xdotool基本功
雖然xdotool是那樣的直觀,但它仍然是個腳本程序。因此,為了要正確地使用它,你還是得了解它的語法。不過敬請放心,相對于程序的功能而言,語法還是比較簡單易學的。
首先,模擬擊鍵是很容易的。你可以從終端敲入下面的命令:
- $ xdotool key [name of the key]
如果你想要連接兩個鍵,可以在它們之間使用“+”操作符。它看起來像這樣:
- $ xdotool key alt+Tab
這兩個組合鍵可以為你切換窗口。
要想讓xdotool幫你輸入,可以使用以下命令:
- $ xdotool type ''
這些對于基本的擊鍵而言已經(jīng)足夠了。但是,xdotool的眾多長處之一,就是它可以獲取特定窗口的焦點。它可以獲取右邊的窗口,然后在里面輸入,所有你記錄下的按鍵都不會人間蒸發(fā),而是老老實實的如你所愿的出現(xiàn)在那里。要獲得該功能,一個簡單的命令可以搞定:
- $ xdotool search --name [name of the window] key [keys to press]
該命令將在打開的窗口中搜索對應名稱的窗口,并聚焦于該窗口,然后模擬擊鍵。
來點更高級的,但很有用哦,xdotool可以模擬鼠標移動和點擊,看這命令:
- $ xdotool mousemove x y
你可以將光標定位到屏幕坐標(x,y)(像素)。你也可以使用“click”參數(shù)來組合:
- $ xdotool mousemove x y click 1
這會讓鼠標移動到(x,y),然后點擊鼠標左鍵。“1”代表鼠標左鍵,“2”則是滾輪,“3”則是右鍵。
***,一旦你這些命令根植于你腦海,你也許想要實際轉(zhuǎn)儲于文件來編輯并試著玩玩。鑒于此,就會有超過一個語句以上的內(nèi)容了。你需要的就是寫一個bash腳本了:
- #!/bin/bash
- xdotool [command 1]
- xdotool [command 2]
- etc
或者你可以使用:
- $ xdotool [filename]
這里你將命令寫入到一個獨立的文件中,然后通過將文件名作為xdotool命令的參數(shù)。
意外收獲
作為本文的一個意外收獲,這里是xdotool的一個具體實例。你可能聽說過,也可能沒聽說過Bing —— 微軟的搜索引擎。在后面的實例中,你會看到你可能從沒聽過Bing獎勵:一個程序,可以讓你用Bing積分兌取亞馬遜的禮物卡和其它的一些禮物卡(LCTT 譯注:我是從來沒聽說過~)。要賺取這些積分,你可以每天在Bing上搜索累計達30次,每次搜索你都會獲得0.5個積分。換句話說,你必須把Bing設為默認搜索引擎,并每天使用它。
或者,你可以使用xdotool腳本,在這個腳本中,會自動聚焦到Firefox(你可以用你喜歡的瀏覽器來取代它),并使用fortune命令生成一些隨機單詞來實施搜索。大約30秒之內(nèi),你的日常搜索任務就完成了。
- #!/bin/bash
- for i in {1..30}
- do
- WID=`xdotool search --title "Mozilla Firefox" | head -1`
- xdotool windowfocus $WID
- xdotool key ctrl+l
- xdotool key Tab
- SENTENCE="$(fortune | cut -d' ' -f1-3 | head -1)"
- xdotool type $SENTENCE
- xdotool key "Return"
- sleep 4
- done
下面來個小結(jié)吧:我真的很喜歡xdotool,即便它的完整功能超越了本文涵蓋的范圍。這對于腳本和任務自動化而言,確實是種平易的方式。負面的問題是,它可能不是最有效率的一個。但我要再說一遍,它忠于職守了,而且學習起來也不是那么麻煩。
你對xdotool怎么看呢?你是否更喜歡另外一個自動化工具,而不是它呢?為什么呢?請在評論中告訴我們吧。