第二种方式(单一框架)
通过DOM.getDocument的参数{"pierce":true,"depth": -1}这个cdp协议就可以获取全部nodeId.通过iframe框架的css选择器DOM.querySelector(nodeId,css)获取iframe框架nodeId,再通过iframe(nodeId+1)实现跨框架===》构成nodeId+1=nodeId==》DOM.querySelector(nodeId,css)==>DOM.setFileInputFiles(nodeId,路径)
1.通过DOM.getDocument
chrome.debugger.sendCommand({tabId: tabId}, 'DOM.getDocument',{},(result) => {console.log(result);})==>获取顶层框架(tab页)的nodeId
2.通过DOM.querySelector(第1次用)
例如iframeCSS选择器(#iframe)
chrome.debugger.sendCommand({tabId: tabId}, 'DOM.querySelector',{nodeId: nodeId,selector:"#iframe"},(result) => {console.log(result);}) ==>>获取到iframe的CSS选择器的nodeId,再nodeId=nodeId+1这样就获取跨框架的nodeId
3.通过DOM.querySelector(第2次用)
例如文件框CSS选择器(#fileInput) 注意这个是重点(跨框架的nodeId):nodeId=nodeId+1
chrome.debugger.sendCommand({tabId: tabId}, 'DOM.querySelector',{nodeId: nodeId,selector:"#fileInput"},(result) => {console.log(result);}) ==>>获取到文件框CSS选择器的nodeId
4.通过DOM.setFileInputFiles
例如设置文件路径["C:/Users/Administrator/Desktop/222.txt"]
chrome.debugger.sendCommand({tabId: tabId}, "DOM.setFileInputFiles", {nodeId:nodeId,"files":["C:/Users/Administrator/Desktop/222.txt"]})
async function wt(tabId) {
var n={tabId: tabId}
let a= 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":"#iframe"});
l = await chrome.debugger.sendCommand(n,"DOM.querySelector", {"nodeId": l.nodeId+1,"selector":"#fileInput"});
l = await chrome.debugger.sendCommand(n, "DOM.setFileInputFiles", {"nodeId":l.nodeId,"files":["C:/Users/Administrator/Desktop/11.png"]});
console.log("1111111");
}
修订版本 | 更新时间 | 更新说明 |
---|---|---|
0 | 4天7小时前 |