Jawaker游戏卡牌自动点击脚本失效问题求助
Jawaker卡牌自动点击脚本无响应问题
我尝试制作一个自动点击Jawaker游戏卡牌的脚本,但无法正常工作。进入游戏获得卡牌后,希望脚本自动点击这些卡牌,对应的HTML结构如下:
<div id="card-c966" class="card face-up club-10 ui-draggable"> <div class="face"></div> <div class="back"></div> </div>
我尝试的代码如下:
var a = document.querySelectorAll('[class*="draggable"]'); Array.prototype.forEach.call(a, callback); function callback(element, iterator) { console.log(iterator, element.id); triggerMostButtons (element); } function triggerMostButtons (jNode) { triggerMouseEvent (jNode, "mouseover"); triggerMouseEvent (jNode, "mousedown"); triggerMouseEvent (jNode, "mouseup"); triggerMouseEvent (jNode, "click"); jNode.click; jNode.click(); } function triggerMouseEvent (node, eventType) { var clickEvent = document.createEvent('MouseEvents'); clickEvent.initEvent (eventType, true, true); node.dispatchEvent (clickEvent); }
目前只有mouseover事件生效(仅显示悬停效果),点击操作无反应,且元素已正确获取,请问我遗漏了什么?
问题排查与解决方法
1. 事件绑定层级错误
游戏的点击事件大概率没绑定在卡牌外层div上,而是绑定在了内部的.face或.back子元素上。可以尝试把事件触发目标换成这些子元素:
function triggerMostButtons (jNode) { const targetEl = jNode.querySelector('.face') || jNode; triggerMouseEvent(targetEl, "mouseover"); triggerMouseEvent(targetEl, "mousedown"); triggerMouseEvent(targetEl, "mouseup"); triggerMouseEvent(targetEl, "click"); targetEl.click(); }
2. 废弃事件接口导致失效
你用的MouseEvents.createEvent接口已被废弃,现代浏览器推荐用MouseEvent构造函数,同时要补充坐标参数——很多游戏会校验点击是否在元素有效区域内:
function triggerMouseEvent(node, eventType) { const rect = node.getBoundingClientRect(); const event = new MouseEvent(eventType, { bubbles: true, cancelable: true, view: window, clientX: rect.x + rect.width / 2, clientY: rect.y + rect.height / 2 }); node.dispatchEvent(event); }
3. 游戏反作弊机制拦截
不少网页游戏会检查事件的isTrusted属性(脚本触发的事件该值为false,真实用户操作为true),这类情况普通事件触发方法会失效。如果是这种情况,只能借助调试协议或模拟真实输入的工具,但这类操作可能违反游戏规则,需谨慎使用。
4. 卡牌状态未校验
确认卡牌处于可交互状态:有些卡牌在非回合阶段会被添加禁用类(比如disabled),或者有其他状态属性限制交互,需要先过滤出可点击的卡牌再执行操作。
内容的提问来源于stack exchange,提问作者user3650773
相关产品推荐
相关产品推荐

