这个原帖在这呢?
https://www.yingdao.com/community/detaildiscuss?id=30e6a26a-a892-4939-b73c-2bd2b9b0194a
使用影刀RPA软件,编写程序来玩别踩白块儿游戏。你的任务是通过影刀RPA来自动完成游戏并尽可能用时最短。
游戏页面: https://gq-orange.github.io/htmlgame/index.html

在可视化流程中,键盘输入指令的按键输入间隙不能设置为0,此时可以直接去更改源码,将对应的方法中的参数改为0即可。

这一版其实是通过图片的MD5值来判断按下哪一个键,在本开发中,有三种情况【白白黑】,【白黑白】,【黑白白】,然后通过下面截图方式获取图片,计算图片MD5值,然后根据MD5判断压下哪一个键。
注意:MD5值可能不止3个,原因是第一次时,有文字,会导致截取的图片不一样。

其实影刀可是化流程最后都是转为Python代码执行的,简化了开发,但却牺牲了运行时间,因此可以直接使用python代码来完成开发,可以加快速度。
from xbot import web, win32
def main(args):
page = web.get(url='https://gq-orange.github.io/htmlgame/index.html', mode="chrome")
for i in range(13):
elems = page.find_all_by_xpath("//div[contains(@style, '(0, 0, 0)')]")
keys = ['jkl'[int(elem.get_attribute('id')[-1])] for elem in elems][::-1]
win32.send_keys(keys=''.join(keys), delay_after=0, send_key_delay=0) (lambda web = xbot.web.get(url="https://gq-orange.github.io/htmlgame/index.html", mode='chrome'): (web.activate(),[xbot.win32.send_keys("J" if "0, 0, 0" in web.find_by_xpath(r"//*[@id='block-3-0']").get_attribute('style') else "K" if "0, 0, 0" in web.find_by_xpath(r"//*[@id='block-3-1']").get_attribute('style') else "L", send_key_delay=0, delay_after=0) for _ in range(51)]))()执行JS代码,用JS代码执行压下按键操作,速度会更快
function (element, input) {
for(i=0; i<=50; i++) {
var element=document.querySelector('.block[id*="-3-"][style*="0, 0, 0"]');
var id=element.id;
var key='JKL'[id[id.length-1]];
pressKey(key);
}
function pressKey(key) {
let pressEvent = new KeyboardEvent('keydown', {
key: key,
keyCode: key.charCodeAt(0)
});
document.dispatchEvent(pressEvent);
}
}function (element, input){
for(i=0;i<=50;i++){
document.dispatchEvent(new KeyboardEvent('keydown', {keyCode: 'JKL'[document.querySelector('*[id*="-3-"][style*="0, 0, 0"]').id[8]].charCodeAt(0)}));
}
}在浏览器压下F12,打开开发者工具,可以分析游戏实现的源代码,发现fre整数变量用来存放分数,board数组变量用来进行黑白块的渲染,0值代表白块,1值代表黑块,当fre=50时,isgameover()函数中判断游戏成功,弹出游戏成功面板。
现在可以直接将fre改为50,然后条用isgameover()函数即可
function (element, input) {
// 在此处编写您的Javascript代码
// element表示选择的操作目标(HTML元素)
// input表示输入的参数(字符串)
fre=50
isgameover()
}注意:本方法是有限制的
》变量必须是全局变量,也就是用var声明的变量,否则不能使用
》有浏览器限制,影刀浏览器可以成功,edge,google浏览器有安全机制,变量不能使用,会报错
在方法5中,获取按哪一个键也是需要时间的,这儿,我们可以将board二维数组的最后一行的某一个值设置为1,这样,就可以一直按下一个键即可,可以节约一些时间。
function (element, input) {
for(i=0; i<=50; i++) {
board[3][0]=1
pressKey('J');
}
function pressKey(key) {
let pressEvent = new KeyboardEvent('keydown', {
key: key,
keyCode: key.charCodeAt(0)
});
document.dispatchEvent(pressEvent);
}
}