1 背景
最近偶尔在玩一款网页游戏,发现上面大量步骤都是重复类似的,点击boss,主角移动到boss位置,开始打boss,然后需要打一段时间,boss死亡,然后可以点击另外一个boss,重复类似工作,需要花较多的时间,才能将一个页面的boss清除干净。
这个时候我们考虑是否可以通过编写脚本让刷boss这件事情变成自动化,等boss复活之后又可以自动刷。 这个就是我们今天的主题,怎样去编写一个游戏脚本取刷页面网页游戏的boss。同样其他的一些操作也是一样。
2 环境
本机环境为ubuntu12.14,非windows环境,windows环境可能又一些更成熟的产品可以使用,我们只讲ubuntu环境下怎样取操作,由于本人对linux环境还在熟悉阶段,所以可能有些地方操作的并不对。
3 步骤
3.1 准备知识
首先我们要有能力操作我们的鼠标,包括鼠标移动到固定位置、鼠标的操作 其次在刷boss期间我们需要等待boss刷完 再次我们要循环我们的操作
3.2 实际操作
3.2.1 鼠标移动
linux中我们的鼠标移动操作 这里我们使用到的工具是:xdotool 安装方式
sudo apt-get install xdotool
整个安装过程很简单 这个时候我们尝试移动鼠标并点击
xdotool mousemove 100 100 click 1
发现生效。 这边简单说一下xdotool工具的使用方式
The xdotool is a utility used from the terminal or in a script to manually perform keyboard and mouse input (see the Xdotool – Keyboard article). The commands can also be used to make a script of many xdotool commands to create large tasks. Later articles will cover the xdotool ability to control window and desktop manipulation.
简单来说就是通过终端模拟鼠标和键盘的操作的工具。 这边说两个常用的方法:
xdotool mousemove 0 0 鼠标移动到0,0位置
xdotool click 1 鼠标点击左键
xdotool getmouselocation 获取鼠标位置,包括在哪个sceen和window上面
通过上面的工具类我们已经可以编写脚本在电脑上面移动了。
3.2.2 等待时间
sleep为将后续的动作延迟一段时间执行 如 date;sleep 1m;date 打印时间,等待1分钟之后,再次打印时间,sleep后面跟数字和时间标识,默认时间标识为秒
sleep number[smhd]
number : 时间长度,后面可接 s、m、h 或 d
其中 s 为秒,m 为 分钟,h 为小时,d 为日数
至此,简单的页面操作已经完成,这个时候我们要循环点击页面的一些按钮。
3.2.3 循环执行
循环执行,需要用到while和for都可以。
while CONDITION; do
statement
...
done
如果是死循环
while ((1)); do
done
3.2.4 整合脚本
vi gamescript.sh
#!/bin/bash
#version 1.0
#author jeffrey
#program: game simple script
#date : 2023-02-13
while ((1));do
xdotool mousemove 600 740 click 1;
sleep 60;
xdotool mousemove 600 760 click 1;
sleep 60;
xdotool mousemove 600 780 click 1;
sleep 60;
xdotool mousemove 600 800 click 1;
sleep 60;
xdotool mousemove 600 820 click 1;
sleep 60;
echo "done";
sleep 1800;
done;
执行脚本:
bash gamescript.sh
效果就出来了。
4 参考资料
https://www.linux.org/threads/xdotool-mouse.10556/ https://www.runoob.com/linux/linux-comm-sleep.html