浏览器插件(mv3)模拟键盘和鼠标操作、 解决网页某些文本输入框和按钮、js代码运行无效的方案

动作开发 · 1037 次浏览
涛涛涛 创建于 2天10小时前

例如一些富文本输入框、文件上传按钮 和自定义的文本框,按钮,
js代码运行后看似填写成功,但一提交数据就会消失,按钮点击无效,没有反应
使用浏览器的cdp协议中的
1.Input.dispatchKeyEvent(键盘按键)
2.Input.insertText(键盘文字输入)
3.Input.dispatchMouseEvent(鼠标点击)
4.Runtime.evaluate(运行js代码)
等方法模拟键盘和鼠标操作,绕过一些浏览器的限制

动作演示:  https://getquicker.net/Sharedaction?code=06077b85-de15-4d8b-8067-08ddd99dc08d

1.Input.dispatchKeyEvent(键盘按键)
方法:就是模拟键盘按键,如:Tab键等     
有的按键无效,不知道怎样设置,没有测试成功(F1-12等功能键)

type          事件类型        string:       keyDown, keyUp, rawKeyDown, char
modifiers  修饰键类型    integer     Alt=1,  Ctrl=2 , Shift=8 (默认: 0)   作用是模拟按键Ctrl+A Ctrl+C Ctrl+V Shift+Tab等

1.Enter键
{
  "key": "Enter",
  "windowsVirtualKeyCode": 13,
  "code": "Enter",
  "text": "\r",
  "unmodifiedText": "\r",
  "type": "keyDown"
}

2.Delete键
{
  "key": "Delete",
  "windowsVirtualKeyCode": 46,
  "code": "Delete",
  "type": "keyDown"
}

在下方会提供一个按键表,需要的可以查询一下其表的数据格式,可能它要一定的格式才能触发按键

1.使用Input.dispatchKeyEvent(键盘按键Tab键)     
注意:使用 type: "keyDown"时,是可以不用和type: "keyUp"连用的,只使用type: "keyDown"应该也是可以的。

浏览器插件的脚本代码(mv3)
var n={tabId: 824181119}
chrome.debugger.attach(n, "1.3")
按键Tab按下
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{ type: "keyDown",key: "Tab"})
按键Tab弹起
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{type: "keyUp",key: "Tab"})

模拟全选Ctrl+A格式如下:

var n={tabId: 824182077}
chrome.debugger.attach(n, "1.3")
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{ type: 'keyDown',windowsVirtualKeyCode: 17, code: 'ControlLeft', key: 'Control', modifiers: 0})      可以不要
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{ type: 'keyDown',windowsVirtualKeyCode: 65, key: 'A', code: 'KeyA',modifiers:2})
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{ type: 'keyUp',windowsVirtualKeyCode: 65, key: 'A', code: 'KeyA',modifiers:2})              可以不要
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{type: 'keyUp',windowsVirtualKeyCode: 17, code: 'ControlLeft', key: 'Control', modifiers: 0})          可以不要
或者   需要试一试看看(选中)
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{ type: 'keyDown',windowsVirtualKeyCode: 17, modifiers: 0})
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{ type: 'keyDown',windowsVirtualKeyCode: 65,modifiers:2})
chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{type: 'keyUp',windowsVirtualKeyCode: 17,  modifiers: 0})

或者-复制( modifiers:2  这个参数的作用)

chrome.debugger.sendCommand(n,"Input.dispatchKeyEvent",{ type: 'keyDown',windowsVirtualKeyCode: 67,modifiers:2})

2.Input.insertText(键盘文字输入)
方法:先让文本框设置为有焦点状态-focus(),再使用Input.insertText(键盘文字输入)填写文本

1.js设置网页的输入框的焦点代码
document.querySelector("#text-editor").focus()

2.使用Input.insertText(键盘文字输入)
浏览器插件的脚本代码(mv3)
var n={tabId: 824181119}
chrome.debugger.attach(n, "1.3");
chrome.debugger.sendCommand( n,"Input.insertText",{text: "Hello, World!"});

3.或者使用这样的样式设置焦点和输入
chrome.debugger.sendCommand(n, "Runtime.evaluate", {expression: 'document.querySelectorAll(".text-editor")[1].focus()'});
chrome.debugger.sendCommand( n,"Input.insertText",{text: "Hello, World!"});

3.Input.dispatchMouseEvent(鼠标点击)
方法:使用js代码获取网页的按钮位置坐标,为点击传递数据坐标,再使用Input.dispatchMouseEvent(鼠标点击)
演示动作 :https://getquicker.net/Sharedaction?code=1defc102-436a-4ae3-806f-08ddd99dc08d


1.js获取网页的按钮位置坐标代码
var rect = document.querySelector("#button").getBoundingClientRect();
var x = rect.left + rect.width / 2;
var y = rect.top + rect.height / 2;
return [x,y]

2.使用Input.dispatchMouseEvent(鼠标点击按钮)

type  事件类型,如 "mousePressed"(按下)、"mouseReleased"(释放)、"mouseMoved"(移动)
button  按键类型,"left"(左键)、"right"(右键)、"middle"(中键)

浏览器插件的脚本代码(mv3)
var n={tabId: 824181119}
chrome.debugger.attach(n, "1.3");
鼠标左键按下(单击)
chrome.debugger.sendCommand(n, "Input.dispatchMouseEvent",{type: "mousePressed", x: x,y: y,button: "left",clickCount: 1});
鼠标左键弹起(单击)
chrome.debugger.sendCommand(n, "Input.dispatchMouseEvent",{type: "mouseReleased", x: x,y: y,button: "left",clickCount: 1});

涛涛涛 最后更新于 2025/8/16

涛涛涛 16小时51分钟前 :


涛涛涛 最后更新于 16小时49分钟前
回复内容
CL 2天8小时前
#1

感谢分享~

涛涛涛 16小时48分钟前
#2

 1.Input.dispatchKeyEvent(键盘按键)   
                                              
按键格式表如下:

{

    '0': {'keyCode': 48, 'key': '0', 'code': 'Digit0'},

    '1': {'keyCode': 49, 'key': '1', 'code': 'Digit1'},

    '2': {'keyCode': 50, 'key': '2', 'code': 'Digit2'},

    '3': {'keyCode': 51, 'key': '3', 'code': 'Digit3'},

    '4': {'keyCode': 52, 'key': '4', 'code': 'Digit4'},

    '5': {'keyCode': 53, 'key': '5', 'code': 'Digit5'},

    '6': {'keyCode': 54, 'key': '6', 'code': 'Digit6'},

    '7': {'keyCode': 55, 'key': '7', 'code': 'Digit7'},

    '8': {'keyCode': 56, 'key': '8', 'code': 'Digit8'},

    '9': {'keyCode': 57, 'key': '9', 'code': 'Digit9'},

    'a': {'keyCode': 65, 'key': 'a', 'code': 'KeyA'},

    'b': {'keyCode': 66, 'key': 'b', 'code': 'KeyB'},

    'c': {'keyCode': 67, 'key': 'c', 'code': 'KeyC'},

    'd': {'keyCode': 68, 'key': 'd', 'code': 'KeyD'},

    'e': {'keyCode': 69, 'key': 'e', 'code': 'KeyE'},

    'f': {'keyCode': 70, 'key': 'f', 'code': 'KeyF'},

    'g': {'keyCode': 71, 'key': 'g', 'code': 'KeyG'},

    'h': {'keyCode': 72, 'key': 'h', 'code': 'KeyH'},

    'i': {'keyCode': 73, 'key': 'i', 'code': 'KeyI'},

    'j': {'keyCode': 74, 'key': 'j', 'code': 'KeyJ'},

    'k': {'keyCode': 75, 'key': 'k', 'code': 'KeyK'},

    'l': {'keyCode': 76, 'key': 'l', 'code': 'KeyL'},

    'm': {'keyCode': 77, 'key': 'm', 'code': 'KeyM'},

    'n': {'keyCode': 78, 'key': 'n', 'code': 'KeyN'},

    'o': {'keyCode': 79, 'key': 'o', 'code': 'KeyO'},

    'p': {'keyCode': 80, 'key': 'p', 'code': 'KeyP'},

    'q': {'keyCode': 81, 'key': 'q', 'code': 'KeyQ'},

    'r': {'keyCode': 82, 'key': 'r', 'code': 'KeyR'},

    's': {'keyCode': 83, 'key': 's', 'code': 'KeyS'},

    't': {'keyCode': 84, 'key': 't', 'code': 'KeyT'},

    'u': {'keyCode': 85, 'key': 'u', 'code': 'KeyU'},

    'v': {'keyCode': 86, 'key': 'v', 'code': 'KeyV'},

    'w': {'keyCode': 87, 'key': 'w', 'code': 'KeyW'},

    'x': {'keyCode': 88, 'key': 'x', 'code': 'KeyX'},

    'y': {'keyCode': 89, 'key': 'y', 'code': 'KeyY'},

    'z': {'keyCode': 90, 'key': 'z', 'code': 'KeyZ'},

    ' ': {'keyCode': 32, 'key': ' ', 'code': 'Space'},

    '*': {'keyCode': 106, 'key': '*', 'code': 'NumpadMultiply', 'location': 3},

    '+': {'keyCode': 107, 'key': '+', 'code': 'NumpadAdd', 'location': 3},

    '-': {'keyCode': 109, 'key': '-', 'code': 'NumpadSubtract', 'location': 3},

    '/': {'keyCode': 111, 'key': '/', 'code': 'NumpadDivide', 'location': 3},

    ';': {'keyCode': 186, 'key': ';', 'code': 'Semicolon'},

    '=': {'keyCode': 187, 'key': '=', 'code': 'Equal'},

    ',': {'keyCode': 188, 'key': ',', 'code': 'Comma'},

    '.': {'keyCode': 190, 'key': '.', 'code': 'Period'},

    '`': {'keyCode': 192, 'key': '`', 'code': 'Backquote'},

    '[': {'keyCode': 219, 'key': '[', 'code': 'BracketLeft'},

    '\\': {'keyCode': 220, 'key': '\\', 'code': 'Backslash'},

    ']': {'keyCode': 221, 'key': ']', 'code': 'BracketRight'},

    '\'': {'keyCode': 222, 'key': '\'', 'code': 'Quote'},

    ')': {'keyCode': 48, 'key': ')', 'code': 'Digit0'},

    '!': {'keyCode': 49, 'key': '!', 'code': 'Digit1'},

    '@': {'keyCode': 50, 'key': '@', 'code': 'Digit2'},

    '#': {'keyCode': 51, 'key': '#', 'code': 'Digit3'},

    '$': {'keyCode': 52, 'key': '$', 'code': 'Digit4'},

    '%': {'keyCode': 53, 'key': '%', 'code': 'Digit5'},

    '^': {'keyCode': 54, 'key': '^', 'code': 'Digit6'},

    '&': {'keyCode': 55, 'key': '&', 'code': 'Digit7'},

    '(': {'keyCode': 57, 'key': '(', 'code': 'Digit9'},

    'A': {'keyCode': 65, 'key': 'A', 'code': 'KeyA'},

    'B': {'keyCode': 66, 'key': 'B', 'code': 'KeyB'},

    'C': {'keyCode': 67, 'key': 'C', 'code': 'KeyC'},

    'D': {'keyCode': 68, 'key': 'D', 'code': 'KeyD'},

    'E': {'keyCode': 69, 'key': 'E', 'code': 'KeyE'},

    'F': {'keyCode': 70, 'key': 'F', 'code': 'KeyF'},

    'G': {'keyCode': 71, 'key': 'G', 'code': 'KeyG'},

    'H': {'keyCode': 72, 'key': 'H', 'code': 'KeyH'},

    'I': {'keyCode': 73, 'key': 'I', 'code': 'KeyI'},

    'J': {'keyCode': 74, 'key': 'J', 'code': 'KeyJ'},

    'K': {'keyCode': 75, 'key': 'K', 'code': 'KeyK'},

    'L': {'keyCode': 76, 'key': 'L', 'code': 'KeyL'},

    'M': {'keyCode': 77, 'key': 'M', 'code': 'KeyM'},

    'N': {'keyCode': 78, 'key': 'N', 'code': 'KeyN'},

    'O': {'keyCode': 79, 'key': 'O', 'code': 'KeyO'},

    'P': {'keyCode': 80, 'key': 'P', 'code': 'KeyP'},

    'Q': {'keyCode': 81, 'key': 'Q', 'code': 'KeyQ'},

    'R': {'keyCode': 82, 'key': 'R', 'code': 'KeyR'},

    'S': {'keyCode': 83, 'key': 'S', 'code': 'KeyS'},

    'T': {'keyCode': 84, 'key': 'T', 'code': 'KeyT'},

    'U': {'keyCode': 85, 'key': 'U', 'code': 'KeyU'},

    'V': {'keyCode': 86, 'key': 'V', 'code': 'KeyV'},

    'W': {'keyCode': 87, 'key': 'W', 'code': 'KeyW'},

    'X': {'keyCode': 88, 'key': 'X', 'code': 'KeyX'},

    'Y': {'keyCode': 89, 'key': 'Y', 'code': 'KeyY'},

    'Z': {'keyCode': 90, 'key': 'Z', 'code': 'KeyZ'},

    ':': {'keyCode': 186, 'key': ':', 'code': 'Semicolon'},

    '<': {'keyCode': 188, 'key': '<', 'code': 'Comma'},

    '_': {'keyCode': 189, 'key': '_', 'code': 'Minus'},

    '>': {'keyCode': 190, 'key': '>', 'code': 'Period'},

    '?': {'keyCode': 191, 'key': '?', 'code': 'Slash'},

    '~': {'keyCode': 192, 'key': '~', 'code': 'Backquote'},

    '{': {'keyCode': 219, 'key': '{', 'code': 'BracketLeft'},

    '|': {'keyCode': 220, 'key': '|', 'code': 'Backslash'},

    '}': {'keyCode': 221, 'key': '}', 'code': 'BracketRight'},

    '"': {'keyCode': 222, 'key': '"', 'code': 'Quote'},

    '\n': {'keyCode': 13, 'code': 'Enter', 'key': 'Enter', 'text': '\r'},

    '\ue007': {'keyCode': 13, 'code': 'Enter', 'key': 'Enter', 'text': '\r'},

    '\ue003': {'keyCode': 8, 'code': 'Backspace', 'key': 'Backspace'},

    '\ue00d': {'keyCode': 32, 'code': 'Space', 'key': ' '},

    '\ue00e': {'keyCode': 33, 'code': 'PageUp', 'key': 'PageUp'},

    '\ue00f': {'keyCode': 34, 'code': 'PageDown', 'key': 'PageDown'},

    '\ue008': {'keyCode': 16, 'code': 'ShiftLeft', 'key': 'Shift', 'location': 1},

    '\ue009': {'keyCode': 17, 'code': 'ControlLeft', 'key': 'Control', 'location': 1},

    '\ue00a': {'keyCode': 18, 'code': 'AltLeft', 'key': 'Alt', 'location': 1},

    '\ue03d': {'keyCode': 91, 'key': 'Meta', 'code': 'MetaLeft'},

    '\r': {'keyCode': 13, 'code': 'Enter', 'key': 'Enter', 'text': '\r'},

    '\ue011': {'keyCode': 36, 'code': 'Home', 'key': 'Home'},

    '\ue012': {'keyCode': 37, 'code': 'ArrowLeft', 'key': 'ArrowLeft'},

    '\ue013': {'keyCode': 38, 'code': 'ArrowUp', 'key': 'ArrowUp'},

    '\ue014': {'keyCode': 39, 'code': 'ArrowRight', 'key': 'ArrowRight'},

    '\ue015': {'keyCode': 40, 'code': 'ArrowDown', 'key': 'ArrowDown'},

    '\ue001': {'keyCode': 3, 'code': 'Abort', 'key': 'Cancel'},

    '\ue002': {'keyCode': 6, 'code': 'Help', 'key': 'Help'},

    '\ue004': {'keyCode': 9, 'code': 'Tab', 'key': 'Tab'},

    '\ue005': {'keyCode': 12, 'shiftKeyCode': 101, 'key': 'Clear', 'code': 'Numpad5', 'shiftKey': '5', 'location': 3},

    '\ue006': {'keyCode': 13, 'code': 'NumpadEnter', 'key': 'Enter', 'text': '\r', 'location': 3},

    '\ue00b': {'keyCode': 19, 'code': 'Pause', 'key': 'Pause'},

    '\ue00c': {'keyCode': 27, 'code': 'Escape', 'key': 'Escape'},

    '\ue010': {'keyCode': 35, 'code': 'End', 'key': 'End'},

    '\ue016': {'keyCode': 45, 'code': 'Insert', 'key': 'Insert'},

    '\ue017': {'keyCode': 46, 'code': 'Delete', 'key': 'Delete'},

    '\ue028': {'keyCode': 46, 'shiftKeyCode': 110, 'code': 'NumpadDecimal', 'key': '\u0000', 'shiftKey': '.', 'location': 3},

    '\ue01a': {'keyCode': 48, 'code': 'Digit0', 'shiftKey': ')', 'key': '0'},

    '\ue01b': {'keyCode': 49, 'code': 'Digit1', 'shiftKey': '!', 'key': '1'},

    '\ue01c': {'keyCode': 50, 'code': 'Digit2', 'shiftKey': '@', 'key': '2'},

    '\ue01e': {'keyCode': 52, 'code': 'Digit4', 'shiftKey': '$', 'key': '4'},

    '\ue01f': {'keyCode': 53, 'code': 'Digit5', 'shiftKey': '%', 'key': '5'},

    '\ue020': {'keyCode': 54, 'code': 'Digit6', 'shiftKey': '^', 'key': '6'},

    '\ue021': {'keyCode': 55, 'code': 'Digit7', 'shiftKey': '&', 'key': '7'},

    '\ue022': {'keyCode': 56, 'code': 'Digit8', 'shiftKey': '*', 'key': '8'},

    '\ue023': {'keyCode': 57, 'code': 'Digit9', 'shiftKey': '\(', 'key': '9'},

    '\ue024': {'keyCode': 106, 'code': 'NumpadMultiply', 'key': '*', 'location': 3},

    '\ue025': {'keyCode': 107, 'code': 'NumpadAdd', 'key': '+', 'location': 3},

    '\ue027': {'keyCode': 109, 'code': 'NumpadSubtract', 'key': '-', 'location': 3},

    '\ue029': {'keyCode': 111, 'code': 'NumpadDivide', 'key': '/', 'location': 3},

    '\ue031': {'keyCode': 112, 'code': 'F1', 'key': 'F1'},

    '\ue032': {'keyCode': 113, 'code': 'F2', 'key': 'F2'},

    '\ue033': {'keyCode': 114, 'code': 'F3', 'key': 'F3'},

    '\ue034': {'keyCode': 115, 'code': 'F4', 'key': 'F4'},

    '\ue035': {'keyCode': 116, 'code': 'F5', 'key': 'F5'},

    '\ue036': {'keyCode': 117, 'code': 'F6', 'key': 'F6'},

    '\ue037': {'keyCode': 118, 'code': 'F7', 'key': 'F7'},

    '\ue038': {'keyCode': 119, 'code': 'F8', 'key': 'F8'},

    '\ue039': {'keyCode': 120, 'code': 'F9', 'key': 'F9'},

    '\ue03a': {'keyCode': 121, 'code': 'F10', 'key': 'F10'},

    '\ue03b': {'keyCode': 122, 'code': 'F11', 'key': 'F11'},

    '\ue03c': {'keyCode': 123, 'code': 'F12', 'key': 'F12'},

    '\ue018': {'keyCode': 186, 'code': 'Semicolon', 'shiftKey': ':', 'key': ';'},

    '\ue019': {'keyCode': 187, 'code': 'NumpadEqual', 'key': '=', 'location': 3},

    '\u0000': {'keyCode': 46, 'key': '\u0000', 'code': 'NumpadDecimal', 'location': 3}

}


回复主贴