# 前言
这一款工具起初是源于我的组长鑫哥分享。使用它之前会经常性遇到我们的一些繁琐且重复的工作,那么就有必要去思考一下,这些工作真的需要我耗费那么多精力么?其实不然,就其重复性而言,对于一名Java工程师就应当抽离出来。(影刀官网:https://www.yingdao.com/ (opens new window))
# 契机
今天遇到了一个需求,朋友让我处理一个Excel表格。对于A列中存放全是一个个简写的链接,需要的工作是把A列中的所有元素逐个放到浏览器中打开,然后复制对应详细的URL下来存入B列进行对应。
# 1.分析
其实这个需求乍一听是基于Excel表格数据进行处理,我的第一反应是想借助最新联系的Python找一个开源的代码进行操作,但似乎网页down下来的代码并不适配,导致一些bug的出现。然后我想到了Java,作为Java开发工程师,利用POI进行数据导入导出并不是难事,但似乎如何去把这个链接放在浏览器打开然后把对应的地址栏的URL粘贴回来成为了困扰我的地方。事出紧急,我便想到了利用影刀代替我操作。
# 2.实战
影刀中提供了Excel数据读取、数据循环等功能,但是循环获取到的对象似乎不能直接让我使用。短时间内研究未果,便决定借助模拟人工点击来完成此次任务。由于点击元素会针对web中的页面,但是我这里并不适配。转而我利用点击鼠标的固定位置,从而完成了对于这些功能的实现。 1.事先将A列数据复制到Sublime Text的第一个文件,然后新建第二个文件用于存放对应的结果 2.利用快捷键Ctrl+X完成A列数据的获取 3.利用键盘快捷键完成应用的切换 4.利用鼠标定位到对应的输入框(为避免特殊情况直接堆叠一起,这里采取覆盖策略,保证顺利进行) 5.控制好时间间隔,利用鼠标点击输入框,键盘控制快捷键进行复制并切换窗口 6.鼠标点击指定位置打开新建的第二个文件,执行粘贴换行 7.鼠标点击回到第一个文件 至此,顺利完成一轮循环。然后利用影刀的循环,可以做到控制文本的进度,我这里是可以清楚看到需要多少次循环,故采用for的形式。其实可以利用上述第2步之后,对于剪贴板内容进行判空来执行循环也不错。
# 3.优化
在模拟点击的过程中,有以下地方需要注意:
# 1.命令执行时鼠标移动的速度:
对于不需要时间缓冲的点击操作而言,中速比瞬间会慢很多,这里会有很大的浪费。
# 2.命令执行后的间隔:
其实对于本机的窗口切换、键盘输入、点击的这些命令都可以快速完成,唯一考虑时间因素的是链接放在搜索栏之后的加载,需要留足一定的缓冲。
# 3.细节优化:
我们的键盘录入也是模拟人工来实现的,适当把键盘录入的速度调快,也可在整个循环中答复提高效率。