Я пытаюсь сделать скриншот, используя Node.js с puppeteer .Я не использую page.screenshot()
, потому что скриншот должен содержать весь рабочий стол.Вместо этого я делаю снимок экрана с помощью команды ImageMagick import
.
Мой текущий код работает большую часть времени.Но в других случаях происходит сбой со странными результатами, такими как:
- Вкладка переключается, но скриншот содержит половину старой страницы.
- Страница переключена, но пуста.
- Добавление задержки работает, но не идеально, потому что иногда загрузка страницы очень медленная.
Кажется, проблема вчто page.bringToFront()
не ожидает полной загрузки страницы.
Я новичок как в Node, так и в кукловоде.Пожалуйста, предложите способ:
- Загрузить страницу в Chrome.
- Перейти на страницу после загрузки.
- Сделать снимок рабочего стола, выполнив команду-line tool.
Добавление задержки в код не является лучшим решением.
Любые предложения по улучшению кода будут полезны.
const puppeteer = require('puppeteer');
const execSync = require('child_process').execSync;
const sleep = require('sleep');
(async () => {
const browser = await puppeteer.launch({
headless: false,
args: [
'--ignore-certificate-errors',
'--no-sandbox',
'--disable-infobars',
'--disable-setuid-sandbox',
'--incognito',
'--window-size=1600,1200',
'--start-maximized',
"--disable-gpu"],
// slowMo: 250, // slow down by 1550ms
});
await browser.newPage();
await browser.newPage();
const pages = await browser.pages();
await Promise.all([
grabpage(pages[0], 'https://www.cnn.com', 'cnn'),
grabpage(pages[1], 'https://www.bbc.com', 'bbc'),
grabpage(pages[2], 'https://www.rediff.com', 'rediff'),
]);
// Someday we will close the browser also.
})();
async function grabpage(page, url, path) {
await page.goto(url);
var infront =page.bringToFront();
infront.then(
sleep.sleep(5),
execSync('import -window root ' + path +'.jpg'),
);
console.log('took Screenshot: '+path+'.jpg')
}
Страница переадресации не загружена полностью без сна