Взаимодействие между основной функцией и функцией рендеринга в Puppeteer

Есть ли способ взаимодействия между основным процессом и процессом рендеринга в Puppeteer, аналогичный ipcMain и функции ipcRenderer в Электрон.

Простое приложение демонстрируется в этом сообщении. Я считаю, что эта функция может быть полезна для отладки путем запуска события от page к основной функции и наоборот.


person Santosh    schedule 07.10.2018    source источник
comment
Вы имеете в виду контекст узла и контекст браузера?   -  person Md. Abu Taher    schedule 07.10.2018
comment
да. Я ищу запускающие события из контекста узла в браузер и наоборот. В Electron есть модуль ipc, который помогает в этом.   -  person Santosh    schedule 08.10.2018
comment
Пожалуйста, уточните, как вы хотите это использовать? Любой фрагмент кода?   -  person Md. Abu Taher    schedule 08.10.2018
comment
Пожалуйста, проверьте ссылку, на которую я указал в своем вопросе. В этом сообщении объясняется тип взаимодействия. Мне нужно. Я хочу вызвать несколько щелчков мышью на стороне клиента на основе входных данных из контекста узла. Я хочу передать данные функции в контексте узла после получения данных из контекста браузера   -  person Santosh    schedule 08.10.2018
comment
:) Я использовал nightmare, electronic, ipcRenderer и все перечисленное. Я говорю о подробностях и примерах кодов.   -  person Md. Abu Taher    schedule 08.10.2018
comment
Возможный дубликат журнала кукловода на странице page.evaluate   -  person SIM    schedule 12.10.2018


Ответы (1)


Отладка: - У Puppeteer есть различные события страницы, используемые для целей отладки, здесь. - Puppeteer недавно добавил трассировку стека ASYNC, чтобы вы могли более точно отслеживать ошибки.

Генерация событий. Вы можете использовать модуль events по умолчанию и exposeFunction для создания собственной системы событий.

Обратитесь к следующему фрагменту кода, в котором есть все упомянутые методы,

const EventEmitter = require("events");
const myEventTracker = new EventEmitter();
myEventTracker.on("some-event", function(...data) {
  // do something on event
  console.log(data);
});

// usage in puppeteer
const puppeteer = require("puppeteer");
puppeteer.launch({ headless: false }).then(async browser => {
  const page = await browser.newPage();

  // normal console events forwarded to node context
  page.on("console", msg => console.log(msg.text()));

  // we can use this to make our own reverse events
  myEventTracker.on("change-viewport", async function(data) {
    // do something on event
    await page.setViewport({ width: data.width, height: data.height });
  });

  // or we can expose the emit function
  await page.exposeFunction("emitter", (...data) =>
  myEventTracker.emit(...data)
  );

  // emit however we want
  await page.evaluate(async => {
    emitter("change-viewport", { width: 1200, height: 800 });
    emitter("some-event", "inside browser");
  });

  await page.goto("http://viewportsizes.com/mine/");
  // await browser.close();
});

Это станет сообщением в блоге, если мы захотим все объяснить, в противном случае я обновлю свой ответ.

person Md. Abu Taher    schedule 08.10.2018
comment
Спасибо, сэр! Здесь есть все, что мне нужно для начала. - person Santosh; 09.10.2018