Protogalaxy

Planet #0

Csgopolygon Withdraw Assistant扫货插件开发日志

Github: https://github.com/SolitudeRA/CSGOPolygon-withdraw-assistant 最近GO群里的大商又有了新需求,因为需要在赌狗网站上扫货,并且货物信息一直在变,而且竞争激烈,所以又找到了我,要做一个能显示每次刷新之后新出来的货物的Chrome插件。虽然最近比较忙,不过在一番准备之后,历经半个月,终于是拿出了一个基本能用的0.9Beta版,期间踩了很多坑,并且还有不少未解决的奇怪问题,所以写篇日志,整理如下: 首先,由于网站本身需要先经过Google的人机验证才能将货物页面刷新出来,所以为了节省系统资源与减少未知的错误,还是使用了与上一个插件相同的被动监听策略,也就是Mutation Observer。不过,有一点不同的是,因为创建了新的div来存放新出现的货物,导致原来在货物div的绑定的监听事件全部失效,并且货物要可以在不同div之间来回移动,所以需要动态绑定click事件到新添加的元素上。为了实现这一点,我用到了Mutation Observer的另外一个特性–Mutation Record。简单来说,Mutation Record可以作为第一个参数来传递给Mutation Observer的回调函数,用来记录发生在观察对象上的DOM变化。通过调用Mutation Record的addedNodes属性,可以获得DOM行为中被添加的DOM对象,这使得我可以动态的为对象绑定click事件。不过,第一个坑就在这里,我原以为每次传给回调函数的是一个单一的Mutation Record对象,DOM树每改变一次就触发一次,其中包含着每次DOM变动的记录,结果与我预想的不同,Mutation Observer的回调函数是在所有DOM变动完成后才触发,并且返回的是一个Mutation Record数组,数组长度与变动次数相符。不过这个坑比较浅,多用几次console.log()来观察就可以避过这个坑,完成版函数如下: let observerRight = new MutationObserver(function (mutationRecord) { let addedNode = mutationRecord[1].addedNodes[0]; if ($(addedNode).hasClass(“slot-right-ext”)) { $(addedNode).on(“click”, function () {Continue readingCsgopolygon Withdraw Assistant扫货插件开发日志

csgo.exchange磨损查询插件开发日志#2

Github:https://github.com/SolitudeRA/CSGO.exchange-Autoretrieve 经过了一次大的迭代更新,插件的版本号来到了2.0(上版本日志在这里),代码主体全部重构,并且将语言规范升级到了ECMAScripts 6,之前的点击动作触发全部是通过主动监听来完成的,比如这样: var IntervalHandler1 = window.setInterval(function () { if ($(“.msgNotif”) !== null) { $(“.msgNotif”).detach(); $(“.widw-close”).click(); setTimeout(function () { $widw.css(“display”, “none”); $bgwidw.css(“display”, “none”); currentNode.append(“<div class=’show-rawext’>success</div>”); window.clearInterval(IntervalHandler1); controller(node, reloadFlag); }, 100);Continue readingcsgo.exchange磨损查询插件开发日志#2

csgo.exchange磨损查询插件开发日志

Github:https://github.com/SolitudeRA/CSGO.exchange-Autoretrieve 最近csgo.exchange这网站对皮肤磨损查询做了点改动,新皮肤的磨损度查询需要用户手动完成,高校群里的大商觉得这样的操作很费时间,所以联系我做了个自动点击插件。经过了一个多星期的研究,终于是将主体完成了七七八八,能够基本运行了。在这里不得不吐槽一下这网站的服务器质量,真的是有点差,脚本的运行速度一快起来,立马就没法响应然后卡死了,所以只能被迫放慢脚本速度。 在开发的过程中,由于网站的响应速度有限,所以使用了各种被动监听器,比如MutationObserver对象,参考MDN,该对象的使用方法如下: // Firefox和Chrome早期版本中带有前缀 var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver // 选择目标节点 var target = document.querySelector(‘#some-id’); // 创建观察者对象 var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { console.log(mutation.type);Continue readingcsgo.exchange磨损查询插件开发日志