在Linux中模拟击键和鼠标移动

在Linux中模拟击键和鼠标移动


  1. `
    你是否曾经拥有一个梦
  2. ——你的计算机
  3. 可以自动为你干活?
  4. 或许,并非因为
  5. 你刚看了终结者。
  6. 然而,除此之外
  7. 脚本和任务自动化
  8. 是每个高级用户追寻的梦
  9. 如果今天
  10. 有许多的解决方案
  11. 可以满足这个目标
  12. 那么
  13. 有时候
  14. 就难以从那众多之中采撷那
  15. 简洁、聪明而又高效的一个
  16. 不能假装
  17. 是我自己发现了它
  18. 而与此同时
  19. 却偏爱着那个
  20. 整洁的软体——xdotool
  21. 其方法是如此直观
  22. 正如它作为X11自动化工具的表露
  23. 转换思想
  24. xdotool可以通过读取文本文件
  25. 模拟击键的旋律
  26. 以及鼠标的曼舞
    `

让Xdotool在Linux定居

对于Ubuntu,Debian或者Linux Mint,你能够只做:


  1. $ sudo apt-get install xdotool

对于Fedora,请使用yum命令:


  1. $ sudo yum install xdotool

对于CentOS用户,可以在EPEL repo中找到该包。在启用EPEL仓库后,只要使用上面的yum命令就可以达成你的愿望。

对于Arch用户,可在Community仓库中找到该包:


  1. $ sudo pacman -S xdotool

如果你还是找不到你的发行版的对应xdotool,你可以从它的官方站点下载。

Xdotool基本功

虽然xdotool是那样的直观,但它仍然是个脚本程序。因此,为了要正确地使用它,你还是得了解它的语法。不过敬请放心,相对于程序的功能而言,语法还是比较简单易学的。

首先,模拟击键是很容易的。你可以从终端敲入下面的命令:


  1. $ xdotool key [name of the key]

如果你想要连接两个键,可以在它们之间使用“+”操作符。它看起来像这样:


  1. $ xdotool key alt+Tab

这两个组合键可以为你切换窗口。

要想让xdotool帮你输入,可以使用以下命令:


  1. $ xdotool type ''

这些对于基本的击键而言已经足够了。但是,xdotool的众多长处之一,就是它可以获取特定窗口的焦点。它可以获取右边的窗口,然后在里面输入,所有你记录下的按键都不会人间蒸发,而是老老实实的如你所愿的出现在那里。要获得该功能,一个简单的命令可以搞定:


  1. $ xdotool search --name [name of the window] key [keys to press]

该命令将在打开的窗口中搜索对应名称的窗口,并聚焦于该窗口,然后模拟击键。

来点更高级的,但很有用哦,xdotool可以模拟鼠标移动和点击,看这命令:


  1. $ xdotool mousemove x y

你可以将光标定位到屏幕坐标(x,y)(像素)。你也可以使用“click”参数来组合:


  1. $ xdotool mousemove x y click 1

这会让鼠标移动到(x,y),然后点击鼠标左键。“1”代表鼠标左键,“2”则是滚轮,“3”则是右键。

最后,一旦你这些命令根植于你脑海,你也许想要实际转储于文件来编辑并试着玩玩。鉴于此,就会有超过一个语句以上的内容了。你需要的就是写一个bash脚本了:


  1. #!/bin/bash
  2.  
  3. xdotool [command 1]
  4. xdotool [command 2]
  5. etc

或者你可以使用:


  1. $ xdotool [filename]

这里你将命令写入到一个独立的文件中,然后通过将文件名作为xdotool命令的参数。

意外收获

作为本文的一个意外收获,这里是xdotool的一个具体实例。你可能听说过,也可能没听说过Bing —— 微软的搜索引擎。在后面的实例中,你会看到你可能从没听过Bing奖励:一个程序,可以让你用Bing积分兑取亚马逊的礼物卡和其它的一些礼物卡(LCTT 译注:我是从来没听说过~)。要赚取这些积分,你可以每天在Bing上搜索累计达30次,每次搜索你都会获得0.5个积分。换句话说,你必须把Bing设为默认搜索引擎,并每天使用它。

或者,你可以使用xdotool脚本,在这个脚本中,会自动聚焦到Firefox(你可以用你喜欢的浏览器来取代它),并使用fortune命令生成一些随机单词来实施搜索。大约30秒之内,你的日常搜索任务就完成了。


  1. #!/bin/bash
  2.  
  3. for i in {1..30}
  4. do
  5. WID=`xdotool search --title "Mozilla Firefox" | head -1`
  6. xdotool windowfocus $WID
  7. xdotool key ctrl+l
  8. xdotool key Tab
  9. SENTENCE="$(fortune | cut -d' ' -f1-3 | head -1)"
  10. xdotool type $SENTENCE
  11. xdotool key "Return"
  12. sleep 4
  13. done

下面来个小结吧:我真的很喜欢xdotool,即便它的完整功能超越了本文涵盖的范围。这对于脚本和任务自动化而言,确实是种平易的方式。负面的问题是,它可能不是最有效率的一个。但我要再说一遍,它忠于职守了,而且学习起来也不是那么麻烦。

你对xdotool怎么看呢?你是否更喜欢另外一个自动化工具,而不是它呢?为什么呢?请在评论中告诉我们吧。

原文发布时间:2014-08-30

本文来自云栖合作伙伴“linux中国”

时间: 2024-11-08 19:02:14

在Linux中模拟击键和鼠标移动的相关文章

VBS sendkeys 模拟击键操作 问题解决_vbs

复制代码 代码如下: ' ====================================== ' VBS 中 SendKeys 模拟键盘击键 ' 2009-07-26 ' 刘林 ' ====================================== Dim WshShell Set WshShell=WScript.CreateObject("WScript.Shell") WshShell.Run "cmd" ' 让脚本等待1000毫秒,也就是

调整Ctrl键加鼠标滚轮玩尺寸的方法

Windows7系统里有一个非常方便的快捷操作--按住键盘上的Ctrl键,同时滚动鼠标的滚轮,部分软件中的字体就可以灵活地变换尺寸大小了. Windows7系统中按住Ctrl键同时滚动鼠标滚轮,可灵活调整部分显示元素大小 先用手里的微软龙年鼠标点击一下对话窗口,按住Ctrl键,向上滚动鼠标的滚轮,果然!字体就变大了!看得很清楚!按住Ctrl键向下滚动鼠标的滚轮,字体就变小了. Windows7系统中按住Ctrl键滚动鼠标滚轮,调整QQ对话框中的字体大小 Windows7系统里这个"Ctrl+鼠标

交互行为量化方法之GOMS击键层模型

一直在关注体验量化方面的理论,剑虹在之前的博文里分享了关于体验量化的一些方法,受益匪浅. 关于行为层的量化方法我想再补充一下goms方法中的击键模型,这种模型的好处在于可操作性更强,设计师可以短时间内独立完成度量. 击键模型中用户的交互行为被分解为几个元动作,每个元动作都通过大量的测试得出一个平均时长(见下表),通过这些元动作的累加得出界面设计方案需要的操作时间,来验证和对比各种方案的优劣.(根据个体不同元动作的耗时不同,但对大部分对比性评估而言采用典型值足够了,如需要精确的绝对时间可以参照cp

Lenovo 500无线键盘或鼠标击键输入

故障现象: Lenovo 安全公告:LEN-4292   潜在影响:可能导致不需要的数据输入   严重性:低   摘要:   未经授权的攻击者可能通过 Lenovo 500 无线键盘或鼠标接收器进行键盘输入.   描述:   发现一处漏洞:处于系统物理临近区域内的攻击者可以利用专门设备,通过所安装的 Lenovo 500 无线键盘或鼠标接收器对用户的系统进行键盘输入(如击键).   由于存在这一漏洞,合法用户通过 Lenovo 500 无线键盘的输入仍保持加密状态,而通过 Lenovo 500

鼠标点击坐标-在鼠标钩子中,如何实时获得鼠标的屏幕坐标?

问题描述 在鼠标钩子中,如何实时获得鼠标的屏幕坐标? 在鼠标钩子的WM_LBUTTONDOWN消息中,我想获得鼠标点击瞬间的坐标.注意,是鼠标点击瞬间. 我现在知道有两种方法 1.GET_X_LPARAM(lparam)和GET_Y_LPARAM(lparam). 这种方法获取的是相对于钩子的鼠标坐标,但是钩子不像窗体,没有自己的坐标吧.我获取到的坐标要么很大,要么是负数...然后我尝试用钩子句柄来转换,ClientToScreen((HWND)hMouseHook, &pt).得到的pt值也不

远程控制-linux中按退格键显示 ^H问题

问题描述 linux中按退格键显示 ^H问题 程序代码说明: 通过read函数读入一段字符 到 buf中 并通过printf函数显示出来 为了按下回车键实现擦除功能,而不显示^H字符,所以修改termios状态 程序代码如下 int main() { char buf[256] = {0}; struct termios term; struct termios oldterm; if(tcgetattr(STDIN_FILENO, &term) == -1)//得到系统termion的设置 {

C#中如何使用代码模拟shift键一直按下,谢谢!

问题描述 C#中如何使用代码模拟shift键一直按下,谢谢! 解决方案 解决方案二:本帖最后由 guwei4037 于 2013-11-12 18:38:45 编辑解决方案三:在listbox里面不同的添加内容:privatevoidbutton1_Click(objectsender,EventArgse){Threadth=newThread(()=>{while(true){Thread.Sleep(1000);SendKeys.SendWait("+");}}){IsBa

编写SQL查询来查找IBM DB2 for Linux和Windows数据库中的外键关系

当一个数据库中存在大量外键约束时,您可能发现难以可视化表之间的外键关系.本文将探讨如何编写 SQL 查询来查找 DB2 for Linux, UNIX, and Windows 中的外键关系. 文中将讨论以下变体. 给定一个外键父表,返回 RI(参照 完整性)子表和后代表,以及从附表到这些子表和后代表的 RI 关系路径. 修改所提供的查询,以返回数据库中所有表的结果. 样例模式 清单 1 中所示的样例模式将用于本文中的示例. 清单 1. 样例模式 set schema newton; creat

批处理模拟Linux中watch命令

REM 批处理模拟Linux中watch命令@echo offcolor 1f:CheckVar1if {%1} equ {} (goto Help) else goto CheckVar2 :Helpecho %0 [time] [command]echo.goto End :CheckVar2if {%1} equ {} (goto Help) else goto OK :OKecho WScript.sleep 1000*%1>%temp%/sleep.vbsFor /L %%t in (