Javascript 使用Puppeter瞄准嵌套的iframe

Javascript 使用Puppeter瞄准嵌套的iframe,javascript,excel,office365,puppeteer,Javascript,Excel,Office365,Puppeteer,目前,我正在尝试创建一些E2E测试,这些测试需要在线登录Excel,然后上传一个扩展 我可以登录,打开Excel,然后点击上传插件按钮,但是,我不能得到更多 到目前为止,我发现有两个iFrame,一个嵌套在另一个中 打开Excel后,我将访问第一个 让targetFrame=wait this.page.frames().find(f=>f.name()==='sdx\u ow\u iframe')根据我的研究,您可以构造一个实现来查找父帧中包含的iframe 请按以下方式测试代码: /**

目前,我正在尝试创建一些E2E测试,这些测试需要在线登录Excel,然后上传一个扩展

我可以登录,打开Excel,然后点击上传插件按钮,但是,我不能得到更多

到目前为止,我发现有两个iFrame,一个嵌套在另一个中

打开Excel后,我将访问第一个


让targetFrame=wait this.page.frames().find(f=>f.name()==='sdx\u ow\u iframe')根据我的研究,您可以构造一个实现来查找父帧中包含的iframe

请按以下方式测试代码:

/**
* @return {!Promise<ElementHandle>}
*/
async ownerFrame() {
  if (!this._frame._parentFrame)
    throw new Error('No parent frame');

  const rootElementHandle = await this._frame.$('*');
  const rootElementDescriptionHandle = await this._client.send('DOM.describeNode', { objectId: rootElementHandle._remoteObject.objectId });

  const parentsIframes = await this._frame._parentFrame.$$('iframe');
  if (!parentsIframes.length)
    throw new Error('No iframe elements found in parent');

  return parentsIframes.find(async parentsIframe => {
    const iframeDescription = await this._client.send('DOM.describeNode', { objectId: parentsIframe._remoteObject.objectId, pierce: true, depth: 2 });
    const iframesRootDescription = iframeDescription.node.contentDocument.children[0];
    return iframesRootDescription.backendNodeId === rootElementDescriptionHandle.node.backendNodeId;
  });
}
/**
*@return{!Promise}
*/
异步ownerFrame(){
如果(!this.\u frame.\u parentFrame)
抛出新错误(“无父帧”);
const rootElementHandle=等待此帧。$('*');
const rootElementDescriptionHandle=等待此消息。_client.send('DOM.DescriptionNode',{objectId:rootElementHandle._remoteObject.objectId});
const parentsIframes=等待此操作。_frame。_parentFrame。$$('iframe');
如果(!parentsIframes.length)
抛出新错误(“在父级中未找到iframe元素”);
返回parentsIframes.find(异步parentsIframe=>{
const iframescription=等待此消息。_client.send('DOM.descripenode',{objectId:parentsIframe._remoteObject.objectId,pierce:true,depth:2});
const iframesRootDescription=iframescription.node.contentDocument.children[0];
返回iframesRootDescription.backendNodeId==rootElementDescriptionHandle.node.backendNodeId;
});
}

感谢您的回答,我可以使用frame.$()和elementHandle.contentFrame()访问该iframe