王一之 发表于 2022-4-21 18:58:30

【小练习】色弱测试小游戏脚本

> 论坛markdown还有点小问题,不能自动保存,哥哥们写文的时候记得先保存草稿,或者写好再复制粘贴上来T T

今天发现一个小游戏,感觉有点意思,大家能不能写一个小脚本来选择色块完成测试呢?

https://xingye.me/game/colortest/index.html

## 我先来
发现所有的元素都是在这个 div#box 这个盒子里

那总体思路就有了,监听这个盒子的变动再模拟点击就好了

!(data/attachment/forum/202204/21/182934yanxrrorrkqxnjze.png)

我们使用MutationObserver去监听
详细的教程可看(论坛中直接搜索MutationObserver):
[油猴脚本开发指南]MutationObserver的使用
https://bbs.tampermonkey.net.cn/thread-988-1-1.html

[油猴脚本开发指南]MutationObserver简易例子
https://bbs.tampermonkey.net.cn/thread-1008-1-1.html

(再次推荐一下ScriptCat扩展,有基本的自动提示补全等功能,写小脚本直接用扩展写很是舒服,还可以格式化代码,让代码更加整洁!)
!(data/attachment/forum/202204/21/184413rovi5jqbfsivzvso.png)

### 代码
```js
// ==UserScript==
// @name         New Userscript
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       You
// @match      https://xingye.me/game/colortest/index.html
// @grant      none
// ==/UserScript==

(function () {
    'use strict';
    // 找到盒子
    let box = document.querySelector('div#box');
    // 观察器的配置(需要观察什么变动)
    const config = { attributes: true, childList: true, subtree: true };
    // 当观察到变动时执行的回调函数
    const callback = function (mutationsList, observer) {
      for (let mutation of mutationsList) {
            if (mutation.type === 'childList') {
                // 找不同
                let diffIndex = 0;
                for (let index = 1; index < mutation.addedNodes.length; index++) {
                  if (mutation.addedNodes.getAttribute('style') != mutation.addedNodes.getAttribute('style')) {
                        diffIndex = index;
                        break;
                  }
                }
                if (diffIndex === 1) {
                  if (mutation.addedNodes.getAttribute('style') == mutation.addedNodes.getAttribute('style')) {
                        diffIndex = 0;
                  }
                }
                // 模拟点击
                setTimeout(() => mutation.addedNodes.click(), 1000);
            }
      }
    };
    // 创建一个观察器实例并传入回调函数
    const observer = new MutationObserver(callback);
    // 以上述配置开始观察目标节点
    observer.observe(box, config);
})();
```

王一之 发表于 2022-4-21 19:00:58

!(data/attachment/forum/202204/21/190044rqllhc0hd22ml55m.png)

来比拼谁的脚本分数高了(🐶

这是随便写的

李恒道 发表于 2022-4-21 19:14:35

![图片.png](data/attachment/forum/202204/21/191433bdzsz5oj59ogggje.png)

李恒道 发表于 2022-4-21 19:22:54

![图片.png](data/attachment/forum/202204/21/192248tbixjboz2bsjdycs.png)
点击破万

Hangover 发表于 2022-4-21 19:30:33

理论上可以无限高分,可以通过时间劫持来使计时器变慢甚至停止

[油猴脚本开发指南]h5视频倍速,时间加速和run-at
https://bbs.tampermonkey.net.cn/thread-176-1-1.html
(出处: 油猴中文网)

Hangover 发表于 2022-4-21 19:37:29

!(data/attachment/forum/202204/21/193713ebff8i8q2i54n1q6.png)

王一之 发表于 2022-4-21 20:47:44

Hangover 发表于 2022-4-21 19:30
理论上可以无限高分,可以通过时间劫持来使计时器变慢甚至停止

[油猴脚本开发指南]h5视频倍速,时间加 ...

不能使用作弊脚本作弊

cxxjackie 发表于 2022-4-21 21:12:55

爆破式作弊{:4_100:}
unsafeWindow.Game.lv = 99999;
unsafeWindow.Game.gameOver();
正经一点的话可以劫持Game的一些函数,在适当的时机不断调用Game.nextLv()就行了。

万事可乐 发表于 2022-4-22 00:17:04

循环执行$('#box>span').click()
~( ̄▽ ̄)~*

水凛子 发表于 2022-4-22 09:21:41

妙啊
页: [1] 2
查看完整版本: 【小练习】色弱测试小游戏脚本