Как выполнить код Node.js в контексте браузера? - PullRequest
0 голосов
/ 25 ноября 2018

Как выполнить код JS на стороне клиента в операторе page.evaluate() (не только код JavaScript браузера, код Node.js)?

const puppeteer = require('puppeteer');

(async () => {
 const browser = await puppeteer.launch();
 const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({path: 'example.png'});
  await page.evaluate(() => {
    document.querySelector('button[type=submit]').click();
  });
  console.log('yes') 
  await browser.close();
})();

1 Ответ

0 голосов
/ 25 ноября 2018

Первый параметр, переданный page.evaluate(), должен быть функцией, которая будет оцениваться в контексте страницы в браузере.

Node.js - это код на стороне сервера, и онпредназначен для выполнения на сервере.

Вы можете передавать аргументы из среды Node.js в функцию страницы, используя следующий метод:

// Node.js Environment
const hello_world = 'Hello, world! (from Node.js)';

await page.evaluate(hello_world => {
  // Browser Page Environment
  console.log(hello_world);
}, hello_world);

Вы можете прослушивать 'console' событие в контексте страницы и вывод результата с использованием page.on():

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