У меня есть несколько ссылок на одной странице, к которой я хотел бы получить доступ либо последовательно, либо сразу. Я хочу открыть все ссылки на своих новых вкладках и получить страницу как pdf для всех страниц. Как я могу достичь этого с кукловодом?
Я могу получить все ссылки с свойством DOM и href, но я не знаю, как их открыть на новой вкладке, чтобы получить доступ к ним, а затем закрыть их.
Вы можете открыть новую страницу в цикле:
const puppeteer = require('puppeteer');
(async () => {
try {
const browser = await puppeteer.launch();
const urls = [
'https://www.google.com',
'https://www.duckduckgo.com',
'https://www.bing.com',
];
const pdfs = urls.map(async (url, i) => {
const page = await browser.newPage();
console.log('loading page: ${url}');
await page.goto(url, {
waitUntil: 'networkidle0',
timeout: 120000,
});
console.log('saving as pdf: ${url}');
await page.pdf({
path: '${i}.pdf',
format: 'Letter',
printBackground: true,
});
console.log('closing page: ${url}');
await page.close();
});
Promise.all(pdfs).then(() => {
browser.close();
});
} catch (error) {
console.log(error);
}
})();
Чтобы открыть новую вкладку (активировать), вам просто нужно позвонить на page.bringToFront()
const page1 = await browser.newPage();
await page1.goto('https://www.google.com');
const page2 = await browser.newPage();
await page2.goto('https://www.bing.com');
const pageList = await browser.pages();
console.log("NUMBER TABS:", pageList.length);
//switch tabs here
await page1.bringToFront();
//Do something... save as pdf
await page2.bringToFront();
//Do something... save as pdf
Я подозреваю, что у вас есть массив страниц, поэтому вам может потребоваться настроить вышеуказанный код, чтобы удовлетворить это.
Что касается создания одного PDF файла из нескольких вкладок, то я вполне уверен, что это невозможно. Я подозреваю, что будет библиотека узлов, которая может принимать несколько файлов PDF и сливаться в одну.