Как автоматизировать создание PDF-файлов приборных панелей/веб-страниц с помощью инструмента веб-автоматизации Puppeteer с открытым исходным кодом

Отправляйте своим клиентам еженедельные или ежемесячные отчеты по электронной почте — они будут вам благодарны!

«Почему вы платите за этот продукт? Какова реальная ценность, в цифрах, от использования этого продукта?».

Если вы зададите этот вопрос своим клиентам, а они не будут знать, какую «ценность» они получают в цифрах (например, сэкономленные часы или клиентов, привлеченных с помощью вашего инструмента), они окажутся в зоне риска оттока 😬.

У каждой SaaS-компании есть приборные панели и метрики, которыми они делятся с клиентами на своей платформе. Это то место, где клиенты действительно понимают, как ваш инструмент или услуга помогает им.

Сегодня мы поделимся с вами тем, как сэкономить время ваших клиентов, автоматически отправляя им PDF-файлы отчетов, чтобы им не приходилось получать их вручную.

И если вы спросите: «Зачем мне это нужно?».

Я отвечу вам, что это может улучшить ваши показатели удержания клиентов:

ваши клиенты автоматически получают отчеты -> они чувствуют ценность от использования вашего продукта/услуги -> они остаются с вами на более длительный срок -> вы увеличиваете пожизненную ценность клиента _🚀.

Клиенты всегда благодарны, когда вы можете автоматизировать повторяющиеся задачи, такие как загрузка отчетов с вашей платформы. Это займет всего около часа при использовании безбраузерной системы и сэкономит драгоценное время ваших клиентов.

Мы поделимся с вами кукловодом генератора pdf * сниппет кода, который вы можете скопировать и вставить и сэкономить время даже на кодировании *😅.

Как автоматизировать генерацию PDF с помощью Browserless

Давайте проиллюстрируем это на приборной панели нашего собственного аккаунта browserless. Мы можем видеть количество запущенных сессий и статистику CPU & памяти нашего рабочего. Мы используем наш API-ключ browserless для запуска скрипта и получения PDF-файла.

Затем вы можете сделать простое приложение NodeJS для планирования этой задачи, а также отправить PDF, полученный из browserless, по электронной почте. Или вы можете отправить эти PDF-файлы через ваши текущие инструменты Email-маркетинга.

Давайте приступим

Прежде всего, создайте учетную запись Browserless:

Выберите тарифный план, который вы хотите использовать: Usage-based с бесплатной пробной версией или Dedicated.

После создания аккаунта вы получите приборную панель (да, у нас тоже есть приборная панель 😀) с ключом API, который вы можете использовать для автоматизации:

Чтобы извлечь эту приборную панель, мы можем использовать API /function для запуска скрипта ниже, где «token» — это ваш API-ключ от Browserless:

const puppeteer = require('puppeteer-core');

(async() => {
    const token = "YOUR_API_KEY";
    const email = "YOUR_LOGIN_EMAIL";
    const password = "YOUR_LOGIN_PASSWORD";

    const browser = await puppeteer.connect({ browserWSEndpoint: 'wss://chrome.browserless.io?token='+token });
    const page = await browser.newPage();
    await page.setViewport({width:800,height:1020});
    await page.goto('https://cloud.browserless.io/account/',{ waitUntil: 'networkidle0'});
    await page.type('#login-email', email, {delay: 10});
    await page.type('#login-password', password, {delay: 10});
    await page.click('div.css-vxcmzt > div > button > span');
    await page.waitForSelector('.chartjs-render-monitor');
    await page.evaluate(() => {
        var leftpanel = document.querySelector(".sticky_nav__3r2Ep");
        leftpanel.parentNode.removeChild(leftpanel);
        const date = new Date();
        document.querySelector('.text-white.mb-0').innerHTML="Sessions on "+date;
        document.querySelector('#app > div > div > div > .col-8').classList.add("col-12");
        document.querySelector('#app > div > div > div > .col-12').classList.remove("col-8");
    })
    await page.emulateMediaType('screen');
    return page.pdf({path:"dashboard.pdf",printBackground:true});
})();
Войти в полноэкранный режим Выйти из полноэкранного режима

Это простой сценарий, в основном мы получаем доступ к URL приборной панели, входим в систему с нашими учетными данными и нажимаем на кнопку входа. После загрузки приборной панели мы генерируем PDF.

Сначала мы импортируем библиотеку puppeteer core, которая является легковесной, поскольку вы будете подключаться к удаленному или существующему хрому, и не поставляется с двоичными файлами браузера.

const puppeteer = require('puppeteer-core');
Вход в полноэкранный режим Выход из полноэкранного режима

Мы обернем весь наш код внутри async IIFE, чтобы наш код выполнялся сразу. Затем мы определим наши локальные переменные, такие как API KEY, email и пароль. Лучшей практикой здесь является использование окружений процессов, но мы пока будем действовать просто.

(async() => {
    const token = "YOUR_API_KEY";
    const email = "YOUR_LOGIN_EMAIL";
    const password = "YOUR_LOGIN_PASSWORD";
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь давайте подключимся к безбраузерной конечной точке WS, предоставив наш API KEY, и создадим новый браузер и страницу, чтобы начать автоматизацию.

const browser = await puppeteer.connect({ browserWSEndpoint: 'wss://chrome.browserless.io?token='+token });
const page = await browser.newPage();
Вход в полноэкранный режим Выход из полноэкранного режима

Как только это будет сделано, мы установим желаемый экран просмотра

await page.setViewport({
    width: 1920,
    height: 1080
})
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем мы перейдем на страницу учетной записи без браузера и подождем, пока сетевой трафик успокоится, чтобы действительно загрузились селекторы электронной почты и пароля.

await page.goto('https://cloud.browserless.io/account/',
{ 
    waitUntil: 'networkidle0'
});
Вход в полноэкранный режим Выход из полноэкранного режима

Мы вводим свои учетные данные и нажимаем кнопку отправки — здесь можно использовать переменные среды для пароля.

await page.type('#login-email', 'YOUR_EMAIL', {delay: 50});
await page.type('#login-password', 'YOUR_PASSWORD', {delay: 50});
await page.click('div.css-vxcmzt > div > button > span');
Вход в полноэкранный режим Выход из полноэкранного режима

После нажатия кнопки входа в систему мы хотим подождать, чтобы убедиться, что страница полностью загрузилась, проверив, что график был отображен.

  await page.waitForSelector('.chartjs-render-monitor');
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь мы хотим изменить страницу перед созданием PDF. Мы можем сделать это внутри метода page.evaluate(). Мы получаем навигационное меню левой панели и удаляем его. Затем находим главную панель с нужным нам содержимым, удаляем класс .col-8 и добавляем класс .col-12, чтобы она была полноэкранной. В этом разделе вы можете свободно изменять пользовательский интерфейс вашей приборной панели, например, удалять ненужные разделы или добавлять новые графические элементы, вставляя html+css, которые вы, возможно, захотите показать в PDF.

await page.evaluate(() => {
  var leftpanel = document.querySelector(".sticky_nav__3r2Ep");
  leftpanel.parentNode.removeChild(leftpanel); //removing the left panel
  const date = new Date();
  document.querySelector('.text-white.mb-0').innerHTML="Sessions on "+date; //adding the date in the title
  document.querySelector('#app > div > div > div > .col-8').classList.add("col-12"); //adding this class to be fullscreen
  document.querySelector('#app > div > div > div > .col-12').classList.remove("col-8"); //removing this class to overwrite the container size.
})
Вход в полноэкранный режим Выход из полноэкранного режима

После того, как все ваши изменения будут сделаны, не стесняйтесь генерировать pdf. Обычно CSS по умолчанию печатает стили CSS (в целях экономии чернил при печати), поэтому вы можете добавить эти две строки кода, чтобы CSS выглядел так, как обычно смотрит на него пользователь. В противном случае CSS может сместиться и выглядеть странно.

await page.emulateMediaType('screen'); //will help not to render print css
return page.pdf({printBackground:true}); //will render backgrounds of your page
Вход в полноэкранный режим Выход из полноэкранного режима

В некоторых случаях страницы отображают свои шрифты с помощью веб-шрифтов, поэтому если ваша страница выглядит странно даже после добавления этих двух строк кода, это может быть связано с тем, что веб-шрифты не загружаются должным образом, потому что страница определяет, что вы запускаете chrome headless, и поэтому не видит необходимости в отображении каких-либо шрифтов вообще. Чтобы решить эту проблему, вы можете либо запустить сессию headful, либо установить пользовательский агент вручную:

await page.setUserAgent(
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
);
Войти в полноэкранный режим Выйти из полноэкранного режима

Вот пример того, почему установка этих двух последних строк кода имеет значение:

Страница, на которой используется только page.pdf(); выглядит следующим образом:

Страница с фоном для печати выглядит следующим образом:

Страница с emulateMediaType, установленным на screen, выглядит так (конечный результат):

Теперь вы можете позаботиться об отправке этого PDF через ваши маркетинговые платформы, получайте удовольствие!

👉 Если вы хотите сделать это самостоятельно, просто создайте аккаунт Browserless и приступайте!

Оцените статью
Procodings.ru
Добавить комментарий