В этом коде есть некоторые проблемы:
frames
- это не сериализуемый объект из контекста Node.js, поэтому его нельзя передать в контексте браузера как есть. - Все
setTimeout()
обратные вызовы будут вызываться сразу через 2 секунды, поэтому у каждого кадра не будет достаточно времени для загрузки. - Эти
setTimeout()
обратные вызовы не ожидаются: page.evaluate()
возвращается до того, как пройдут эти 2 секунды, иСоздание PDF происходит до загрузки iframe.
Вы можете попробовать этот подход:
// page loaded
await page.evaluate(async () => {
for (const iframe of Array.from(document.querySelectorAll('iframe'))) {
iframe.scrollIntoView();
await new Promise((resolve) => { setTimeout(resolve, 2000); });
}
});
// pdf creation