用油猴脚本自动玩游戏

发现有个游戏(玩到一定级别后)只需要重复机械的鼠标操作就可以玩下去。在Chrome的控制台用javascript模拟了一下,完全可以。于是考虑用代码来自动化玩游戏。但是,写好代码,运行一下却发现找不到元素。一查,原来这个游戏是在iframe里,由于跨域,Chrome禁止用javascript访问iframe里的元素。

于是改用Tampermonkey脚本实现。match两个地址,一个是页面所在地址,一个是iframe的地址。因为考虑加个“暂停/继续”的按钮,这样可以随时中止或继续游戏。因为不能加在iframe里,所以只能放在外面的页面上。怎样中止/继续呢?开始考虑加个全局变量,后来发现有问题。因为match了两个地址,等于是脚本会执行两次,每次都重新初始化了变量值。

于是用Tampermonkey的GM_setValue和GM_getValue来保存状态变量的值。因为这个是全局的,不管脚本执行了几次,只要是同一个脚本,就可以共享。中止/继续的功能实现了。

又发现一个问题,就是当游戏网页所在的tab失去焦点时,游戏就会停下来。开始装了几个Keep Alive的插件,但都不行。在Tampermonkey里加了代码,也不行。最后打开dev tools,然后ctrl+shift+P,找到Emulate a focused page,确定,这下可以了,缺点是必须保持dev tools一直开着。不过因为是自己用,不是问题。

又考虑点击暂停按钮时,不是马上暂停,而是运行到某个阶段才停止。这样就带来一个问题,如果知道它停止了呢?用Tampermonkey的GM_notification做了个提示,停止时调用一下,就会在屏幕下角跳出来提示,而且会发声。

最后的效果是运行脚本,然后浏览网页,干别的事,过一段时间去看看,游戏还在自动玩下去,达到了预期的目标。

这个程序本身虽然不复杂,但是也牵涉到不少问题,比如iframe的跨域问题,在不同网页脚本之间传递数据的问题,如何防止tab失去焦点后游戏停下来,以及如何提示进度。原本感觉比较简单的一个程序,调试下来,还是花了不少时间。只有动手去做,才会发现很多原来考虑不到的问题。虽然,这些问题大部分都可以通过ai解决,但是,ai给出的解决方案,还是要自己调试过,才知道是否走得通。而且ai主要是根据你提出的问题,给出解决方案,但需求还是要你自己去挖掘。

posted @ 2026-05-18 21:37  平静寄居者  阅读(21)  评论(0)    收藏  举报