如何触发‘isTrusted = true‘点击事件

2023-11-16

前言

isTrusted是DOM属性(只能可读):如果事件是由用户调用的,则该事件是可信的,如果是由脚本调用的,则该事件是不可信的。

总的来说就是:如果你是通过正常浏览器方式进行操作,基本无法改变该属性。

解决方法

1.使用python的selenium进行模拟点击,因为python执行的是Chrome DevTools Protocol协议

2.node的话使用puppeteer来弄, puppeteer可以配置不显示浏览器, 还可以直接访问本地文件, 我是比较推荐这个方式来弄的

3.使用谷歌扩展API

manifest.json

{
    "name": "Getting Started Example",
    "version": "1.0",
    "description": "Build an Extension!",
    "manifest_version": 3,
    "permissions": [
      "debugger",
      "declarativeContent",
      "storage",
      "activeTab"
    ],
    "background": {
      "service_worker": "service-worker.js"
    },
    "content_scripts": [
      {
        "matches": ["<all_urls>"],
        "js": ["js/jquery-1.8.3.js", "js/content.js"]
      }
    ],
    "web_accessible_resources": [
        {
            "matches": ["<all_urls>"],
            "resources": [ "js/inject.js", "js/collina.js","js/jquery-1.8.3.js"]
        }
    ],
    "action":{
        "default_popup": "popup.html",
        "default_icon": "img/1.png",
        "default_title": "Latest Covid Report"
    },
    "icons": {
      "16": "img/1.png",
      "32": "img/1.png",
      "48": "img/1.png",
      "128": "img/1.png"
    }
  }

content.js

// 监听到popup.js消息
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
     test_dom()
})

function test_dom() {
    // 通过谷歌浏览器bug进行添加信任事件
    
    window.addEventListener('mousedown', onDownEvent);
    window.addEventListener('mouseup', onUpEvent);
 
    action_dom()
}
function action_dom() {
    let nav_dom = $(".zcy-panel-header-title")[0]
    console.log(nav_dom)

    nav_dom.addEventListener('mousedown', function(e) {
        console.log("...点击按钮 mousedown...")
        console.log(e)
        e.preventDefault();

        let obj = { eventPlease: "trusted", x: 0, y: 0, mouse: "D" }
        chrome.runtime.sendMessage(obj, function (response) {
            console.log("...content mousedown action_dom response...");
            console.log(response);
        });

    }, true);

    let clickEvent = document.createEvent('MouseEvents');
    clickEvent.initEvent('mousedown', true, true);
    nav_dom.dispatchEvent(clickEvent);




    // 弹起
    nav_dom.addEventListener('mouseup', function(e) {
        console.log("...点击按钮 mouseup ...")
        console.log(e)
        e.preventDefault();

        let obj = { eventPlease: "trusted", x: 0, y: 0, mouse: "U" }
        chrome.runtime.sendMessage(obj, function (response) {
            console.log("...content mouseup action_dom response...");
            console.log(response);
        });

    }, true);
    let click2Event = document.createEvent('MouseEvents');
    click2Event.initEvent('mouseup', true, true);
    nav_dom.dispatchEvent(click2Event);
    
}

function onDownEvent(e) {
    console.log("...onDownEvent...")
    console.log(e);
}
function onUpEvent(e) { 
    console.log("...onUpEvent...")
    console.log(e); 
}

简易写法:

 let obj = { eventPlease: "trusted", x: cx || 400, y: cy || 200, mouse: "D" }
    chrome.runtime.sendMessage(obj, function (response) {
        console.log("mousedown 返回信息:");
        console.log(response);
    });

popup.html

<div class="bottom">
            <h2>浏览器信任事件:</h2>
            <div>
                <button id="t7">开启</button>

                <button id="t8">测试</button>
            </div>
        </div>

popup.js

$("#t7").click(function () {
        console.log("t7 点击...")
        if ($("#t7").text() == '开启') {
            // $("#t7").text("关闭");
            chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
                debuggeeId = { tabId: tabs[0].id }
                console.log(debuggeeId)
                chrome.debugger.attach(debuggeeId, '1.2', function() {
                    chrome.debugger.sendCommand(debuggeeId, "Debugger.enable", {}, function() {
                        console.log("-----开启------")
                    })
                })
            });
        } else {
            // 关闭不了
            // $("#t7").text("开启");
            // console.log(debuggeeId)
            // chrome.debugger.detach(debuggeeId, function() {
            //     chrome.debugger.sendCommand(debuggeeId, "Debugger.disable", {}, function() {
            //         console.log("------关闭-----")
            //     })
            // })
        }
    })
    $("#t8").click(function () {
        console.log("t8 点击...")
        sendMessageToContentScript({cmd:'find8', value:'测试事件'}, function(response) {
            console.log('回复:'+response);
        });
    })

// 向content.js 发送信息
function sendMessageToContentScript(message, callback) {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, message, function(response)
        {
            if(callback) callback(response);
        });
    });
}

service-worker.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {

sendResponse({ yourEvent: "正在调整, 需要时间生效" });
        xC = request.x; 
        yC = request.y;

        if (request.mouse == "D") {
            console.log("......service-worker 鼠标按下......");
            chrome.debugger.sendCommand({ tabId: sender.tab.id }, "Input.dispatchMouseEvent", { type: "mousePressed", x: xC, y: yC, button: "left", clickCount: 1 }, function (e) { 
                console.log('clickDown')
                console.log(e) 
            });

        } else if (request.mouse == "U") {
            console.log(".......service-worker 鼠标弹起.......");
            chrome.debugger.sendCommand({ tabId: sender.tab.id }, "Input.dispatchMouseEvent", { type: "mouseReleased", x: xC, y: yC, button: "left", clickCount: 1 }, function (e) { 
                console.log('clickUp') 
                console.log(e)
            });

        }
})

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何触发‘isTrusted = true‘点击事件 的相关文章

  • WPF InkCanvas 基础使用教程

    大家好 由于很多原因 我有很长一段时间没有在 CSDN 上分享我的学习成果了 如今终于可以回归分享之路了 之前在做一个项目的时候 想在一个区域里绘制自己的图形 于是上网搜索资料 无意中找到了 InkCanvas 但我们最终并没有在项目里使用
  • mvp基类抽取

  • Linux 获取内存和CPU使用率

    ifndef SYS FUNC H define SYS FUNC H int GetMemInfo int pTotal int pUsed int GetCpuUsedRate int pValue endif include sys
  • 220920python学习:变量、运算符和分支结构

    220920python学习 变量 运算符和分支结构 一 变量 变量的作用 保存数据 程序中使用数据的方式 在需要数据时直接提供数据 先将数据保存到变量中 然后在需要使用数据的时候通过变量来提供数据 需要多次打印或使用同一个数据 用变量最便
  • 优化(2)——射线检测基础,合批原理

    射线检测 射线响应的方法 首先获取到canvas下所有graphic组件 当前的ui元素是否接收射线 第一个if判断是否绘制到屏幕上 是否勾选RaycastTarget接受射线 是否进行了剔除 第二个if判断点击是否在当前对象上 第三个判断
  • 【问题记录】python 命令行启动 http server 在局域网内从浏览器下载

    一 安装 python 要确保本机或服务器安装 python 二 查看本机 服务器的 ip 地址 命令 ifconfig 可以查找 ipv4z 字段 例如 172 16 0 12 如果是服务器起的话 就不用查看 ip 了 直接就是服务器 i

随机推荐

  • 华为云存储空间图库占比太大_华为手机照片太多?放这里既安全又不占内存,瞬间腾出50G空间...

    现在的手机拍照功能越来越强大 很多人都习惯在旅游出行 聚餐吃饭时用手机拍照记录自己的生活 久而久之手机相册就存储了一大堆图片 占用大量的手机内存 怎么办呢 通常的做法就是定期删减一些不必要的图片 但是这样太麻烦了 有没有方法可以将这些手机照
  • maven环境变量配置,总不成功,你就这样试试

    我下载了maven 解压后的目录为 配置了用户变量为下图 然后配置系统的path变量如下图 配置完后我也重启了系统 但是还是显示为下图 这是怎么回事 我进入 bin 下执行命令就没问题 说明程序好好的 但是这个怎么就是不成功呢 分享到 举报
  • 实例分割之SOLOv2: Dynamic, Faster and Stronger

    论文 代码 SOLOv2为作者对SOLO的改进 采用动态卷积核生成实例掩码 若对SOLO不了解 可先戳这里 作者取名为Dynamic head 将SOLO中的Mask Branch改为kernel branch和feature branch
  • ubuntu下nfs服务安装

    操作系统 ubuntu22 04 2 一 服务端安装与配置 1 在服务端安装nfs服务端组件 sudo apt install nfs kernel server 2 创建共享目录share并且授权所有人可以访问 sudo mkdir sh
  • 物联网全栈教程-从云端到设备(一)

    一 2016年的时候 我还在学校里面准备着毕业论文 当时做的课题是预测一个挖掘机上面的一个继电器的寿命 我们的想法是检测其吸合的次数 然后根据吸合的次数来预计其寿命 这个想法很简单 因为一个继电器失效之前通常会正常吸合一定的次数比如10W次
  • 【错误】IDEA :Windows找不到文件“chrome”。请确定文件名是否正确,再试一次

    idea运行前端页面的时候 遇到错误找不到浏览器位置 首先确认的就是地址没找到 那么需要我们手动添加一下 找到浏览器 查看属性复制它的全路径 在回到idea中然后在IDEA里面 File gt setting gt Web Browsers
  • EMC整改小技巧

    EMC整改小技巧 差模干扰与共模干扰 差模干扰 存在于L N线之间 电流从L进入 流过整流二极管正极 再流经负载 通过热地 到整流二极管 再回到N 在这条通路上 有高速开关的大功率器件 有反向恢复时间极短的二极管 这些器件产生的高频干扰 都
  • 浏览器会因为什么样的脚本而崩溃

    浏览器可能因为以下几种情况而崩溃 无限循环 如果JavaScript脚本包含一个无限循环 浏览器将无法停止脚本的执行 导致浏览器不响应甚至崩溃 例如 以下代码会导致无限循环 while true 无限循环 内存泄漏 如果JavaScript
  • Java关键字--------final关键字

    final关键字 final关键字表示最终的 不可修改的 final关键字可以用来修饰类 方法和属性 1 final关键字修饰属性 被final关键字修饰的属性的值和类型都不能再改变 就属于常量 只能做一次赋值 被final修饰的属性通常与
  • 【XINLIX 原语】XILINX 原语的使用之 IBUFDS 差分转单端、OBUFDS 单端转差分

    目录 IBUFGDS IBUFDS 介绍 IBUFDS 示意图 例化方式 OBUFDS OBUFDS 介绍 OBUFDS 示意图 例化方式 在 XILINX 中有许多原语 常见的差分转单端 IBUFDS 单端转差分 OBUFDS IBUFG
  • SO_LINGER选项

    SO LINGER选项 SO LINGER选项用于控制close系统调用在关闭TCP连接时的行为 默认情况下 当我们使用close系统调用来关闭一个socket时 close将立即返回 TCP模块负责把该socket对应的TCP发送缓冲区中
  • 代理IP与网络安全在跨境电商中的关键作用

    跨境电商已成为全球商业的重要组成部分 然而 随之而来的网络安全问题也日益凸显 为了在海外市场取得成功 不仅需要优质的商品和服务 还需要稳定 安全的网络连接 本文将介绍如何运用Socks5代理IP技术解决这些挑战 1 代理IP与网络安全 网络
  • [技术讨论]PT100采样电路设计

    本来不论PT100还是PT1000 他们的采样电路网上都很多 而且之前直接用的是现成的MAX31865方案 奈何领导说太贵 用集成运放搭吧 领导动动嘴 属下跑断腿 于是各方论坛 度娘 终于整了个有希望的方案 仅以此文记述这段硬件方案设计的经
  • MySQL 中的 SET 与 ENUM 类型使用详解

    一 SET类型 在创建表时 就指定SET类型的取值范围 sql view plain copy 属性名 SET 值1 值2 值3 值n 其中 属性名 参数指字段的名称 值n 参数表示列表中的第n个值 这些值末尾的空格将会被系统直接删除 其基
  • IRET指令详解

    copy from http lion3875 blog 51cto com 2911026 532347 当使用IRET指令返回到相同保护级别的任务时 IRET会从堆栈弹出代码段选择子及指令指针分别到CS与IP寄存器 并弹出标志寄存器内容
  • alert获取输入框内容_js弹出输入框并且获取输入值

    prompt 方法用于与用户交互 提示用户输入信息的对话框 首先 看看prompt方法的语法形式 var val prompt str1 str2 以上代码中 此方法包含两个属性 str1 提示用户输入的信息 str2 用户输入文本信息默认
  • OpenAI最新官方ChatGPT聊天插件接口《插件示例demo》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(四)(附源码)

    Example plugins 插件示例demo 前言 Introduction 导言 Learn how to build a simple todo list plugin with no auth 了解如何构建一个简单的待办事项列表插
  • 钉钉机器人接收阿里云物联网平台转发的数据

    开篇先献上效果图 现在钉钉已经成为跟微信一样流行的APP了 社交端微信占了 企业端现在的老大应该是非钉钉莫属了 现在用户数量应该已经超过4亿了吧 疫情期间钉钉可是真火了一把 好了 下面进入正题 1 数据获取 首先数据的来源是接入到阿里物联网
  • 背景差分法示例

    背景差分法 背景差分法是一种很常用而且广泛传感的技术 主要用于背景不动的情况下提取前景 它主要的原理是在当前帧和背景做减法 然后使用threshold进行二值化得到前景掩码 下面是背景减法的示意图 背景差分法主要包含以下两个步骤 1 背景的
  • 如何触发‘isTrusted = true‘点击事件

    前言 isTrusted是DOM属性 只能可读 如果事件是由用户调用的 则该事件是可信的 如果是由脚本调用的 则该事件是不可信的 总的来说就是 如果你是通过正常浏览器方式进行操作 基本无法改变该属性 解决方法 1 使用python的sele