Сохранить снимок экрана, даже если путь не существует? - PullRequest
0 голосов
/ 17 июня 2020
await page.screenshot({path: `results/screenshots/${projectname}/${date}/SiteAdded.png`});

При выполнении вышеуказанной строки кода происходит сбой с ошибкой, как показано ниже.

ENOENT: no such file or directory, open 'results/screenshots/...../SiteAdded.png'

Это правда, потому что путь еще не указан в системе. Есть ли способ (например, флаг), который я могу использовать, чтобы сообщить кукловоду, что сначала нужно создать вложенные папки, а затем сохранить файл?

Мой обходной путь - сначала создать папки с использованием другого API, а затем передать путь к странице .screenshot, но мне интересно, есть ли какой-либо прямой способ.

Обновление

Сообщил о проблеме отслеживания в проекте Github, как это было предложено в комментариях.

Вот трекер: https://github.com/puppeteer/puppeteer/issues/6093 если кому интересно.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Нет ни флага Chromium / puppeteer, ни опции page.screenshot, которые бы это сделали. Единственный способ - использовать узел «fs» для создания каталога до того, как скриншот будет сохранен кукловодом.

fs.mkdirSyn c выполнит свою работу:

const fs = require('fs');

[...] 

const path = `results/screenshots/${projectname}/${date}`;

fs.mkdirSync(path);
await page.screenshot({ path: `${path}/SiteAdded.png` });
0 голосов
/ 17 июня 2020

Извините за невозможность ответить в комментариях (здесь newb ie), но в дополнение к предложению @theDavidBarton вы можете заранее проверить, существует ли каталог, или использовать try / catch. пример:

const fs = require('fs');

[...] 
const path = `results/screenshots/${projectname}/${date}`;

try {
     await page.screenshot({ path: `${path}/SiteAdded.png` });
} catch(err) {
     fs.mkdirSync(path);
     await page.screenshot({ path: `${path}/SiteAdded.png` });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...