本地的网页可能不能使用(file:///开头的,可能是本地域不同造成的,Runtime.evaluate里面的限制)
原理代码:
async function 运行js代码并上传文件(e) {
let { tabId: t, jsdm: h ,files:g } = e;
var n={tabId: t};
let a= await chrome.debugger.attach(n, "1.3");
a= await chrome.debugger.sendCommand(n, "Runtime.evaluate", {expression:h});//运行js代码并获取元素文件框的objectId
let objectId=a.result.objectId; //获取元素文件框的objectId
await chrome.debugger.sendCommand(n, "DOM.setFileInputFiles", { objectId:objectId, files:g}) //上传文件路径
}
js代码格式为上面为运行代码,
var gg=window.frames[1]; //切换到指定框架,从顶层框架里查找frames的位置,并切换到frame框架里面
gg.document.querySelector('#textInput').value=123; //指定框架运行的js代码
gg.aa=[1,2,3,4,5]; //向框架中声明全局变量aa
gg.document.querySelector('#fileInput'); //获取框架中元素文件框的objectId,一定要放到最后一行,为上传文件准备
最后一行一定要为文件框元素,例如:gg.document.querySelector('#fileInput'),这样就可以获取到获取元素文件框的objectId,不要写属性
注意:使用Runtime.evaluate直接在js代码上切换到指定框架【window.frames[1]】,获取框架中元素文件框的objectId【gg.document.querySelector('#fileInput'); 】,这一步很关键
//参数说明
tabId: 调试目标
jsdm: js代码
files: 需要上传文件的路径数组
//参数示例
{
tabId: 779853286,
jsdm: `var gg=window.frames[1];
gg.document.querySelector('#textInput').value=123;
gg.aa=[1,5,9,833,5];
gg.document.querySelector('#fileInput');`,
files: ["C:/Users/Administrator/Desktop/11.png"]
}
修订版本 | 更新时间 | 更新说明 |
---|---|---|
1 | 1天15小时前 | 1 |
0 | 1天16小时前 |