chrome浏览器模拟鼠标点击插件clicker

主要功能:浏览器插件自动点击网站,将流量导入代理扫描器进行扫描

# 用法

下载clicker插件源码,然后在chrome浏览器开发者模式下,以文件夹方式加载该插件
配置clicker,并开启插件爬虫。然后打开待测网站即可
配合代理扫描器来发现安全漏洞

源码:https://github.com/zzzzfeng/Clicker

# 关键代码

HOOK_EVENT_LIST = [];
_addEventListener = Element.prototype.addEventListener;
Element.prototype.addEventListener = function(event, listener, useCapture) {
    HOOK_EVENT_LIST.push({"type": event, "element": this});
    console.log('event '+event);
    _addEventListener.apply(this, arguments);
};


var documentAll = document.querySelectorAll('*');
var eventlist = [];
for(let i=0;i<documentAll.length;i++){
    let v = documentAll[i];
    if(v.tagName == 'A'){
        if(v.href.length>12)
            console.log('a '+v.href);
    }else if(v.tagName == 'FORM'){
        console.log('form '+v.action);
    }else{
        let h = v.getAttribute('data-src');
        if(h)console.log('data-src '+h);
        h = v.getAttribute('data-url');
        if(h)console.log('data-url '+h);
        try{
            new URL(h);
        }catch{
            var attrs = v.attributes;
            for (var j = 0; j < attrs.length; j++) {
                attr_name = attrs[j].nodeName;
                attr_value = attrs[j].nodeValue;
                if (attr_name.substr(0, 2) == "on") {
                    console.log(attrs[j].nodeName + ' : ' + attr_value);
                    eventlist.push(attr_value);
                    //eval(attr_value);
                }
                
            }
        }
    }
    

}
console.log(eventlist);


for(var i in HOOK_EVENT_LIST){
		var evt = new CustomEvent('CustomEvent');
		evt.initCustomEvent(HOOK_EVENT_LIST[i]["type"], true, true, null);
		console.log('dispatch event '+HOOK_EVENT_LIST[i]["type"]);
		HOOK_EVENT_LIST[i]["element"].dispatchEvent(evt);
	}


for(let i=0;i<eventlist.length;i++){
    eval(eventlist[i]);
}

# 技术细节

  • Clicker基于chrome浏览器插件开发
  • Clicker所做的工作:
    • 寻找当前tab页面(窗口)所有的a标签,在新的tab页面打开
    • 寻找当前tab页面所有的form标签,自动填充后在新tab页面提交
    • 寻找所有标签的data-src/data-url属性,在新的tab页面打开
    • 寻找所有标签的on事件,依次触发事件执行
    • hook拦截addEventListener事件,依次触发事件执行
    • 所有tab页均会执行以上几步操作,并发执行;tab页执行完以上操作,会自动close窗口
  • 此外Clicker还有
    • tab数量监控功能,防止浏览器打开过多tab页面,而内存崩溃退出
    • 全局数组去重功能,防止重复打开
    • 白名单功能,防止打开不相干站点
    • 黑名单功能,防止自动退出,登录cookie失效

参考漏扫动态爬虫实践-安全客 - 安全资讯平台

# 局限性

- 对于事件造成的页面跳转,后续事件无法继续触发,暂时没有好的解决办法

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是一个简单的鼠标自动点击器界面的代码示例,你可以在此基础上进行修改和优化: ```python import tkinter as tk import pyautogui class AutoClicker: def __init__(self, master): self.master = master self.master.title("鼠标自动点击器") # 创建选择坐标位置的标签 self.label = tk.Label(self.master, text="请选择需要点击的坐标位置") self.label.pack() # 创建按钮,用于获取当前鼠标坐标 self.get_pos_button = tk.Button(self.master, text="获取鼠标位置", command=self.get_position) self.get_pos_button.pack() # 创建文本框,用于显示当前鼠标的坐标位置 self.pos_text = tk.Text(self.master, width=20, height=1) self.pos_text.pack() # 创建输入框,用于输入需要点击的次数 self.clicks_label = tk.Label(self.master, text="请输入需要点击的次数") self.clicks_label.pack() self.clicks_entry = tk.Entry(self.master, width=10) self.clicks_entry.pack() # 创建开始点击按钮 self.start_button = tk.Button(self.master, text="开始点击", command=self.start_clicking) self.start_button.pack() # 创建停止点击按钮 self.stop_button = tk.Button(self.master, text="停止点击", command=self.stop_clicking) self.stop_button.pack() # 初始化点击状态 self.is_clicking = False def get_position(self): # 获取当前鼠标的坐标位置 pos = pyautogui.position() self.pos_text.delete(1.0, tk.END) self.pos_text.insert(tk.END, f"{pos.x}, {pos.y}") def start_clicking(self): # 开始点击 clicks = int(self.clicks_entry.get()) self.is_clicking = True while self.is_clicking and clicks > 0: # 获取当前鼠标位置 pos = pyautogui.position() # 点击鼠标 pyautogui.click(pos.x, pos.y) clicks -= 1 def stop_clicking(self): # 停止点击 self.is_clicking = False if __name__ == "__main__": root = tk.Tk() auto_clicker = AutoClicker(root) root.mainloop() ``` 此代码使用 Python 的 tkinter 模块创建了一个简单的窗口界面,包含了获取鼠标坐标、输入需要点击的次数、开始点击和停止点击等功能。其中,鼠标点击使用了 pyautogui 模块实现。 需要注意的是,此代码仅作为示例,可能存在一些不足之处,你可以根据实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值