実行する必要があります:サイトのチェーン全体でユーザーのやり取り(旅)をシミュレートする必要があります。Chrome DevToolsプロトコル:新しいタブを制御する
質問:シミュレーションされたクリックの結果として開いたタブをプログラム的に制御するヒントはありますか?
私の経験: 私はchrome-remote-interface npmパッケージを使用しています。
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
}
今、私は最近開いたタブと対話したいと思います: 私はクロームリモート・インタフェースと、これらのメソッドを初期化するカスタムChromeControllerクラスでクリックをシミュレートすることができますよ。私はexperimenetalターゲットドメイン(ノードのCLIでのプロトタイピング)で新しいタブをするtargetIdを取得することができます:
になり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'})
私はこれとやりとりできませんが、接続を見つけられず、ページとランタイムオブジェクトに読み込む方法が見つかりません。
私はドキュメントで検索してもグーグルで試してみた:「サイト:chromedevtools.github.ioするtargetId」だけ
> 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})、元のタブを閉じます。
ありがとうございました!
が、私はそれを解決する助けにはならないとして、この答えはコメントとしてより適しだろうと思います問題。そうであっても、それは問題を解決するのに役立つものではありません。この種の投稿はご遠慮ください –