无头Chrome - 从加载的网页触发回调

Jen*_*nck 6 javascript headless-browser google-chrome-devtools phantomjs

有没有办法从加载的网页触发回调?我以前使用PhantomJS,可以使用以下代码:

 if (typeof window.callPhantom === 'function') {
    window.callPhantom({ data: 'RenderPDF' });
 }
Run Code Online (Sandbox Code Playgroud)

并在phantomjs脚本中:

page.onCallback = function (data) {
   /* callback code */
};
Run Code Online (Sandbox Code Playgroud)

Dav*_*per 3

您可以使用运行时域中的评估函数在浏览器上评估 javascript 。

window.callChrome下面的示例评估一个函数,该函数返回一个承诺,该承诺将在调用时得到解决。

function callChrome() {
  return () => {
    return new Promise((resolve, reject) => {
      window.callChrome = resolve;
    });
  });
}

// runtime is located in the client object
Runtime.evaluate({
  expression: `(${callChrome()})()`,
  awaitPromise: true,
}).then((result) => {
  // what you've passed into the window.callChrome function.
});
Run Code Online (Sandbox Code Playgroud)

计算的表达式如下所示。

(() => {
  return new Promise((resolve, reject) => {
    window.callChrome = resolve;
  });
})()
Run Code Online (Sandbox Code Playgroud)

一旦页面准备好,您就应该真正运行这段代码。理想情况下使用该Page.loadEventFired功能。