You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Badoo.com通过Tampermonkey脚本触发投票按钮点击?

Tampermonkey自动投票问题:绕过事件限制与混淆代码

一、先定位投票的核心触发逻辑

直接模拟事件无效时,先揪出页面实际处理投票的底层逻辑:

  • 用调试器断点抓调用栈:打开Firefox开发者工具「调试器」面板,在「事件监听器断点」里勾选Keyboard下的keydown/keyup,手动按1点赞触发暂停,查看「调用栈」从下往上找最贴近业务的函数(比如likeHandler、vote这类命名)。
  • 全局监听事件注册:用Tampermonkey的unsafeWindow覆盖页面的addEventListener,打印所有键盘事件监听函数,直接定位处理1/2键的逻辑:
const originalAdd = unsafeWindow.addEventListener;
unsafeWindow.addEventListener = function(type, handler) {
  if (type === 'keydown') {
    console.log('键盘事件处理函数:', handler.toString());
  }
  return originalAdd.call(this, type, handler);
};
  • 格式化混淆代码:在调试器里找到Cn这类混淆函数,点击「美化代码」按钮({}图标)展开代码,分析它的逻辑——比如你贴的Cn函数涉及自定义onSelect事件,可进一步查找Vn函数,看它如何获取事件监听器,或直接定位投票触发入口。

二、绕过isTrusted限制的实操方案

页面检测isTrusted(仅真实用户操作触发的事件为true),直接模拟事件无效,优先用以下方法:

1. 直接调用核心业务函数

如果找到页面全局的投票函数(比如unsafeWindow.doVote(1)),直接调用是最可靠的方案:

// ==UserScript==
// @name         自动投票脚本
// @match        你的目标网站地址
// @grant        unsafeWindow
// ==/UserScript==

(function() {
    'use strict';

    function autoProcess() {
        // 调用点赞函数(假设核心函数为doVote)
        if (unsafeWindow.doVote) {
            unsafeWindow.doVote(1); // 1点赞,2替换为跳过对应参数
        }
        // 滑动到下一个资料
        const nextItem = document.querySelector('.next-content');
        if (nextItem) nextItem.scrollIntoView({behavior: 'smooth'});
        // 定时循环,可根据页面加载速度调整间隔
        setTimeout(autoProcess, 2500);
    }

    // 页面加载完成后启动
    window.addEventListener('load', () => setTimeout(autoProcess, 1500));
})();

2. 用页面内部的事件触发方式

若找不到核心函数,试试调用页面自定义的事件构造器(比如你贴的dr类):

// 模拟页面自定义keydown事件
const keyEvent = new unsafeWindow.dr('keydown', 'keydown', null, {keyCode:49}, unsafeWindow.document);
unsafeWindow.document.dispatchEvent(keyEvent);

3. 模拟可信事件的兜底方案

如果以上方法都无效,试试原生事件构造器(部分页面不会严格检测isTrusted):

function simulateKey(keyCode) {
    const event = new KeyboardEvent('keydown', {
        key: String.fromCharCode(keyCode),
        keyCode: keyCode,
        bubbles: true,
        cancelable: true,
        view: unsafeWindow
    });
    unsafeWindow.document.body.dispatchEvent(event);
}
// 调用按1键点赞
simulateKey(49);

三、注意事项

  • 必须给脚本加上@grant unsafeWindow权限,否则无法访问页面全局变量和函数。
  • 页面可能动态加载内容,可结合setInterval或MutationObserver监听元素变化,避免找不到目标节点。
  • 不要设置过短的定时间隔,避免被网站检测为机器人。

内容的提问来源于stack exchange,提问作者Fapka Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:05:33