浏览器cdp协议-通过在命令中-运行js代码-上传文件-获取指定框架上下文ID等

动作开发 · 62 次浏览
涛涛涛 创建于 11小时45分钟前

1.向当前活动网页上传文件
(async function () {
  let target = {tabId: null};//或 { targetId: null }
  await chrome.debugger.attach(target, "1.3");
  d = await chrome.debugger.sendCommand(target, "DOM.getDocument");
  d = await chrome.debugger.sendCommand(target, "DOM.querySelector", {
    nodeId: d.root.nodeId,
    selector: "input[type='file']",
  });
  await chrome.debugger.sendCommand(target, "DOM.setFileInputFiles", {
    nodeId: d.nodeId,
    files: ["C:/Users/Administrator/Desktop/11.txt"]
  });
  return 11;
})();

2.获取当前活动网页框架的上下文ID-为在指定框架里运行js准备
(async function () {
  let target = { tabId: null };
  await chrome.debugger.attach(target, "1.3");
  d = await chrome.debugger.sendCommand(target, "DOM.getDocument");
  d = await chrome.debugger.sendCommand(target, "DOM.querySelector", {nodeId: d.root.nodeId,selector: "iframe"});
  d = await chrome.debugger.sendCommand(target, "DOM.resolveNode", {nodeId: d.nodeId+1});
  console.log(1111);
  //await chrome.debugger.detach(target);
  return d.object.objectId.split(".")[1];
})();

3.跨框架异域上传文件-模拟输入文本-运行js
(async function () {
  let targetIds = [];
  let d = await chrome.debugger.getTargets();
  for (const targetInfo of d) {
    if (targetInfo.url.includes("网页.html")) {
      targetIds.push(targetInfo.id);
    }
  }

  let target = { targetId: targetIds[0] };
  //let target = { targetId: null };
  await chrome.debugger.attach(target, "1.3");
  //await chrome.debugger.sendCommand(target, "DOM.enable");//DOM.focus
  await chrome.debugger.sendCommand(target, "Runtime.evaluate", {expression: 'document.querySelector("#titleInput").focus()'});
  await chrome.debugger.sendCommand(target,"Input.insertText",{text: "文件111"});
  d = await chrome.debugger.sendCommand(target, "DOM.getDocument");
  b = await chrome.debugger.sendCommand(target, "DOM.querySelector", {
    nodeId: d.root.nodeId,
    selector: "#titleInput"
  });
  await chrome.debugger.sendCommand(target, "DOM.focus", {nodeId: b.nodeId});
  await chrome.debugger.sendCommand(target,"Input.insertText",{text: "文件111"});
  b = await chrome.debugger.sendCommand(target, "DOM.querySelector", {
    nodeId: d.root.nodeId,
    selector: "input[type='file']"
  });
  await chrome.debugger.sendCommand(target, "DOM.focus", {nodeId: b.nodeId});
  await chrome.debugger.sendCommand(target,"Input.insertText",{text: "Hello, World!"});
  b = await chrome.debugger.sendCommand(target, "DOM.querySelector", {
    nodeId: d.root.nodeId,
    selector: "input[type='file']",
  });
  await chrome.debugger.sendCommand(target, "DOM.focus", {nodeId: b.nodeId});
  await chrome.debugger.sendCommand(target,"Input.dispatchKeyEvent",{ key: "Enter", text: "\r",type: "keyDown" });
  await chrome.debugger.sendCommand(target, "DOM.setFileInputFiles", {
    nodeId: d.nodeId,
    files: ["C:/Users/Administrator/Desktop/11.txt"]
  });
  
  await chrome.debugger.detach(target);
  return 22;
})();

4.在浏览器插件后台运行js
(async function () {
  const targetIds = [];
  let d = await chrome.debugger.getTargets();
  for (const targetInfo of d) {
    if (targetInfo.url.includes("background.js")) {
      targetIds.push(targetInfo.id);
    }
  }
  let target = { targetId: targetIds[0] };
  await chrome.debugger.attach(target, "1.3");
  d = await chrome.debugger.sendCommand(target, "Runtime.evaluate", {expression:"function aa(){let d = [1,2,3,5,4];return JSON.stringify(d)}"});
  await chrome.debugger.detach(target);
  return d;
})();

5.模拟鼠标点击当前活动网页的网页元素

(async function () {
    let n={tabId: null };
    await chrome.debugger.attach(n, "1.3");
    let l = await chrome.debugger.sendCommand(n, "DOM.getDocument", {});
    l = await chrome.debugger.sendCommand(n,"DOM.querySelector", {"nodeId": l.root.nodeId,"selector":"#fileInput"});
    l = await chrome.debugger.sendCommand(n, "DOM.getBoxModel", {"nodeId":l.nodeId});
    let centerX = (l.model.border[0] + l.model.border[2]) / 2;
    let centerY = (l.model.border[1]+ l.model.border[7]) / 2;
    await chrome.debugger.sendCommand(n, "Input.dispatchMouseEvent",{type: "mousePressed", x: centerX,y: centerY,button: "left",clickCount: 1});
    await chrome.debugger.sendCommand(n, "Input.dispatchMouseEvent",{type: "mouseReleased", x: centerX,y: centerY,button: "left",clickCount: 1});
})();

 

涛涛涛 最后更新于 2026/1/26

回复内容
暂无回复
回复主贴