是否可以将数据从客户端(浏览器)发送给木偶操纵者?

时间:2018-04-07 07:22:56

标签: phantomjs puppeteer google-chrome-headless

我之前已经创建了一个由phantomjs渲染的服务器端。

客户端

// when all client ajax request and page render finished
window.callPhantom('page.done')

// when page not found
window.callPhantom('page.fail')

服务器端

page.onCallback = function(status) {
  // when page render finished
  if(status == 'page.done') {
    // start render
  }

  // when page not found
  else {
    // response 404 page not found
  }
}

我现在想从幻影变成镀铬木偶。

如何在所有客户端ajax请求完成后将数据从客户端(浏览器)传递到服务器(puppeteer)(如phantomjs callPhantom)。

使用chrome puppeteer可以做到吗?

2 个答案:

答案 0 :(得分:1)

我遇到了与您相同的问题,这是我得到的解决方案:

您可以使用函数page.exposeFunction

它将把一个函数绑定到页面window中,因此您可以在客户端评估该函数以在Node方面做一些事情。

文档中有一个示例。

我希望这可以为您提供帮助。

答案 1 :(得分:0)

使用page.evaluate(pageFunction, ...args)将数据传递到页面。此示例将选择器字符串传递给页面以进行评估:

(async() => {
  const puppeteer = require('puppeteer')

  const browser = await puppeteer.launch()
  const page = await browser.newPage()

  page.on('console', msg => {
    for (let i = 0; i < msg.args().length; ++i)
      console.log(`${i}: ${msg.args()[i]}`);
  });

  await page.goto('https://google.com/')
  await page.evaluate(selector => {
    const el = document.querySelector(selector);
    console.log(el.src)
  }, 'img#hplogo');

  await browser.close()
})();