В то время как фактическое решение может / должно ожидать каждого элемента, чтобы быть видимым, есть некоторые другие возможные решения.
Возможное решение 1
Вы можете прокрутить до элемента, подождать некоторое время для правильной визуализации и затем сделать скриншот.
elementHandle.screenshot()
прокручивает до элемента, но не может задержать или дождаться, пока элемент будет видимым.
A Быстрый поиск по официальному репо показал, что на данный момент существует не менее 19 открытых выпусков, в которых упоминается blank screenshot
.
Вместо этого мы можем использовать пользовательский .evaluate, или .hover и т. Д. Для прокрутки до элемента, прежде чем делать снимок экрана.
elementHandle.hover()
: Этот метод прокручивает элемент при необходимости, а затем использует page.mouse для наведения курсора на центр элемента. Если элемент отсоединен от DOM, метод выдает ошибку.
Давайте использовать его,
// Get a list of all elements.
const elements = await page.$$('div.chartContainer');
for (let i = 0; i < elements.length; i++) {
// scrolls into view and hovers the element
await elements[i].hover();
// wait for some random number
await page.waitFor(1000);
// get screenshot of a particular element
await elements[i].screenshot({
path: `${ i }.png`
});
}
Возможное решение 2
Некоторые сообщили, что использование elementHandle.boundingBox()
решило их проблему. Что это делает, захватывает положение, высоту, ширину и т. Д. Для элемента и использует это для скриншота.
// Get a list of all elements.
const elements = await page.$$('div.chartContainer');
for (let i = 0; i < elements.length; i++) {
// get screenshot of a particular area
await page.screenshot({ // <-- use page here
path: `${ i }.png`,
clip: await elements[i].boundingBox() // <-- use clip here
});
}