Как выполнить код 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.info('yes')
await browser.close();
})();
Или вы имеете в виду, что клик не происходит, пока браузер не закроется? Что именно не работает?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Первым параметром, переданным в 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.info(hello_world);
}, hello_world);
Вы можете прослушать событие 'console' в контексте страницы и распечатать результат, используя page.on():
page.on('console', msg => {
for (let i = 0; i < msg.args().length; i++) {
console.info(`${i}: ${msg.args()[i]}`);
}
});
Но разве вы уже этим не занимаетесь?
document.querySelector('button[type=submit]').click();должен запускается в контексте браузера