Как автоматически делать скриншоты для нескольких страниц с помощью Puppeteer - PullRequest
0 голосов
/ 20 июня 2019

У меня есть список URL-адресов в текстовом файле. Я хочу получить скриншот для каждой страницы автоматически, читая каждый URL из текстового файла с помощью Puppeteer.

const puppeteer = require('puppeteer');
async function doScreenCapture(url, site_name) {
    let browser = await puppeteer.launch({ headless: false });
    let page = await browser.newPage();
    await page.goto(url);
    await page.setViewport({width: 1382, height: 717})
    await page.waitFor(1000);
    console.log('do screen capture running');
    await page.screenshot({ path:`${site_name}.png`, fullPage: true });
    await page.close();
    await browser.close();
  }
async function run() {
    console.log('running');
    var fs = require("fs");
    var text = fs.readFileSync("linksList.txt").toString().split("\n");

    for (var i = 0; i < text.length; ++i) {
            doScreenCapture(text[i], "image"+i)
            console.log("image"+i+" completed");
            await page.waitFor(5000);
        }
 }

run();

Это ошибка, которую я получил при запуске кода

(узел: 77868) UnhandledPromiseRejectionWarning: ReferenceError: страница не определена при запуске (C: \ Users \ S533488 \ Documents \ Web Mining \ Пробный кукловод в justDail \ MultipleScreenshots.js: 39: 13) на объекте. (C: \ Users \ S533488 \ Documents \ Web Mining \ Пробный кукловод в justDail \ MultipleScreenshots.js: 43: 1) в Module._compile (module.js: 653: 30) в Object.Module._extensions..js (module.js: 664: 10) в Module.load (module.js: 566: 32) в tryModuleLoad (module.js: 506: 12) в Function.Module._load (module.js: 498: 3) в Function.Module.runMain (module.js: 694: 10) при запуске (bootstrap_node.js: 204: 16) в bootstrap_node.js: 625: 3 (узел: 77868) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1) (узел: 77868) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания устарело. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения. сделать снимок экрана работает.

1 Ответ

1 голос
/ 20 июня 2019

Здесь я вижу две проблемы:

  • page не существует в цикле «for», только в функции «run», и это дает вам исключение.Вы можете переместить ожидание в функцию

  • «doScreenCapture» - это асинхронная функция, и вы должны использовать await doScreenCapture, чтобы страницы открывались последовательно, а не сразу.

...