2017-08-11 63 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

我認爲,這個答案會更適合作爲註釋,因爲它無助於解決問題。即便如此,作爲一個意見,它也無助於解決問題。請避免使用這些類型的帖子 –