Google chrome 如何从chrome获取DOM.shadowRootPushed事件?

Google chrome 如何从chrome获取DOM.shadowRootPushed事件?,google-chrome,puppeteer,chrome-devtools-protocol,Google Chrome,Puppeteer,Chrome Devtools Protocol,我一直在尝试使用CDPSession从puppeter获取DOM.shadowRootPushed事件。 以下是加载的包含shadowRoot的页面: 带阴影根的页面 你好,多姆 var attachShadow=HTMLElement.prototype.attachShadow HTMLElement.prototype.attachShadow=函数(选项) { var sh=attachShadow.call(此选项) console.info(“%s”阴影附加到%s',option.

我一直在尝试使用
CDPSession
puppeter
获取
DOM.shadowRootPushed
事件。 以下是加载的包含shadowRoot的页面:


带阴影根的页面
你好,多姆
var attachShadow=HTMLElement.prototype.attachShadow
HTMLElement.prototype.attachShadow=函数(选项)
{
var sh=attachShadow.call(此选项)
console.info(“%s”阴影附加到%s',option.mode,此)
//在此处添加一个MitationObserver
返回sh
}
setTimeout(函数(){
const host=document.getElementById('host');
const shadowRoot=host.attachShadow({mode:'open'});
shadowRoot.innerHTML='Hello Shadow DOM';
}, 3300);
我使用这个脚本来获取事件:

const puppeter=require('puppeter');
(异步()=>{
//使用Puppeter启动浏览器并打开页面。
const browser=wait puppeter.launch({
无头:错
//userDataDir:“/home/w/.config/chromium/”
});
const page=wait browser.newPage();
//创建原始DevTools协议会话以与页面对话。
//使用CDP设置动画播放速率。
const session=wait page.target().createCDPSession();
等待session.send('Animation.enable');
等待session.send('DOM.enable');
session.on('Animation.animationCreated',()=>{
log('Animation created!');
});
session.on('DOM.shadowrootpush',()=>{
log('DOM.shadowRootPushed');
});
session.on('DOM.shadowRootPopped',()=>{
log('DOM.shadowRootPopped');
});
等待会话.send('Animation.setPlaybackRate'{
后卫率:2,
});
//快看!在“加载…”屏幕上快速播放动画!
//等待页面。转到('https://pptr.dev');
等待页面。转到('http://localhost:8000');
等待等待(1115000)
控制台日志(“完成”)
})();
异步函数等待(毫秒){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
我正在制作
动画。尽管动画已经创建了
。CDP网站称这是一个实验性事件。是否需要在启动选项中传递标志?
依赖项:

“依赖项”:{
“木偶演员”:“8.0.0”,
“ws”:“7.2.3”
},
Chrome版本
:版本90.0.4427.0(开发者版本)(64位)

调试日志:

$DEBUG=*节点cdpsession.js
木偶演员:协议发送► {“方法”:“Target.setDiscoverTargets”,“参数”:{“discover”:true},“id”:1}+0ms
木偶演员:礼节◀ RECV{“method”:“Target.targetCreated”,“params”:{“targetInfo”:{“targetId”:“3462A6199ADAF347FD96DF0016967C81”,“type”:“page”,“title”:“url”:“about:blank”,“attached”:false,“browserContextId”:“9DD61B1C854229B47F6F3A16F46B1AF0”}+41ms
木偶演员:礼节◀ RECV{“method”:“Target.targetCreated”,“params”:{“targetInfo”:{“targetId”:“3995d8d1-5e35-48ff-b5c6-faf339b9ec9a”,“type”:“browser”,“title”:“url”:“attached”:true}}}+1ms
木偶演员:礼节◀ RECV{“id”:1,“结果”:{}+0ms
木偶演员:协议发送► {“method”:“Target.createTarget”,“params”:{“url”:“about:blank”},“id”:2}+1ms
木偶演员:礼节◀ RECV{“method”:“Target.targetInvochanged”,“params”:{“targetInfo”:{“targetId”:“3462A6199ADAF347FD96DF0016967C81”,“type”:“page”,“title”:“about:blank”,“url”:“about:blank”,“attached”:false,“browserContextId”:“9DD61B1C854229B47F6F3A16F46B1AF0”}+6ms
木偶演员:礼节◀ RECV{“method”:“Target.targetCreated”,“params”:{“targetInfo”:{“targetId”:“6DAD742835DE715BE5F8B09EC00BD”,“type”:“page”,“title”:“url”:“about:blank”,“attached”:false,“browserContextId”:“9DD61B1C854229B47F6F3A16F46B1AF0”}+13ms
木偶演员:礼节◀ RECV{“id”:2,“result”:{“targetId”:“6DAD742835DE715BE5F8B09EC00BD”}+11ms
木偶演员:协议发送► {“方法”:“Target.attachToTarget”,“参数”:{“targetId”:“6DAD74282835DE715BE5F8B09EC00BD”,“展平”:true},“id”:3}+0ms
木偶演员:礼节◀ RECV{“method”:“Target.targetInvochanged”,“params”:{“targetInfo”:{“targetId”:“6DAD742835DE715BE5F8B09EC00BD”,“type”:“page”,“title”:“url”:“about:blank”,“attached”:true,“browserContextId”:“9DD61B1C854229B47F6F3A16F46B1AF0”}+18ms
木偶演员:礼节◀ RECV{“method”:“Target.attachedToTarget”,“params”:{“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”,“targetInfo”:{“targetId”:“6DAD742835DE715BE5BE5F8B09EC00BD”,“type”:“page”,“title”:“url”:“about:blank”,“attached”:“true”,“browserContextId”:“9DD61B1C854229B47F6F36F41AF0”;“waitingForDebugger”:false}+1ms}
木偶演员:礼节◀ RECV{“id”:3,“result”:{“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”}+0ms
木偶演员:协议发送► {“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”,“方法”:“Page.enable”,“参数”:{},“id”:4}+1ms
木偶演员:协议发送► {“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”,“方法”:“Page.getFrameTree”,“参数”:{},“id”:5}+0ms
木偶演员:协议发送► {“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”,“方法”:“Target.setAutoAttach”,“参数”:{“autoAttach”:true,“waitForDebuggerOnStart”:false,“展平”:true},“id”:6}+0ms
木偶演员:协议发送► {“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”,“方法”:“Performance.enable”,“params”:{},“id”:7}+0ms
木偶演员:协议发送► {“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”,“方法”:“Log.enable”,“参数”:{},“id”:8}+1ms
木偶演员:协议发送► {“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”,“方法”:“Page.setInterceptFileChooserDialog”,“参数”:{“enabled”:true},“id”:9}+0ms
木偶演员:礼节◀ RECV{“method”:“Target.targetInvochanged”,“params”:{“targetInfo”:{“targetId”:“6DAD742835DE715BE5F8B09EC00BD”,“type”:“page”,“title”:“about:blank”,“url”:“about:blank”,“attached”:true,“browserContextId”:“9DD61B1C854229B47F6F3A16F46B1AF0”}+11ms
木偶演员:礼节◀ RECV{“id”:9,“result”:{},“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0EB”}+4ms
木偶演员:礼节◀ RECV{“id”:4,“result”:{},“sessionId”:“D9D90F0C9845C459A09442F9B0E0F0