2017-08-11 64 views
1

需要完成:我需要模拟一系列网站上的用户交互(旅程)。Chrome DevTools协议:控制新标签

问题:您是否有任何提示如何以编程方式控制由于模拟点击而打开的选项卡?

我的经验: 我使用chrome-remote-interface npm软件包。 我能模拟与初始化铬远程接口以及这些方法的自定义ChromeController类点击:

async simulateClick(selector) { 
    return await this.evaluate(function (selector) { 
     document.querySelector(selector).click() 
    }, selector); 
} 
/** 
* Shamelessly stolen from simple-headless-browser 
*/ 
async evaluate (fn, ...args) { 

    const exp = args && args.length > 0 ? `(${String(fn)}).apply(null, ${JSON.stringify(args)})` : `(${String(fn)}).apply(null)` 
    const result = await this.client.Runtime.evaluate({ 
     expression: exp, 
     returnByValue: true 
    })   

    return result 
} 

现在我想与最近打开的选项卡进行交互。我可以用experimenetal目标域(在节点CLI原型)获得新标签的目标ID:

var targets; 
chromeController.client.Target.getTargets().then(t => targets = t); 

导致:

{ targetInfos: 
[ { targetId: '97556479-cdb6-415c-97a1-6efa4e00b281', 
    type: 'page', 
    title: 'xxx/preview/239402/', 
    url: 'xxx/preview/239402/' }, 
    { targetId: 'bbfe11d5-8e4a-4879-9081-10bb7234209c', 
    type: 'page', 
    title: 'Document', 
    url: 'xxx/preview/239402/teaser/0/' } ] } 

我能够与标签之间切换:

chromeController.client.Target.activateTarget({targetId:'xxx'}) 

但是我无法获得任何交互,我找不到连接,如何将它加载到Page和Runtime对象中。

我搜索的文档,也试着用搜索引擎:“网站:chromedevtools.github.io目标ID”,这只会导致我

> chromeController.client.Browser.getWindowForTarget({targetId: '97556479-cdb6-415c-97a1-6efa4e00b281'}).catch(e => console.log(e.message)); 
Promise { <pending> } 
> 'Browser.getWindowForTarget' wasn't found 

我也试着Target.setDiscoverTargets({发现:true})并关闭原始选项卡。

感谢您的帮助!

回答

0

我也正在逐渐“Browser.getWindowForTarget未找到” Debian的,谷歌的Chrome不稳定版本61

+0

我认为,这个答案会更适合作为注释,因为它无助于解决问题。即便如此,作为一个意见,它也无助于解决问题。请避免使用这些类型的帖子 –