/ #web #linux 

"Прогрівання" кешу для закритих частин сайту за допомогою Puppeteer

Найпростіший спосіб “прогріти” кеш - пройтись за допомогою wget по карті сайту. У випадку, коли сайт чи окремі його розділи доступні лише зареєстрованим користувачам, цей спосіб не підійде.

У пригоді може стати Headless Chrome - хром, якому не потрібно рендерити сторінку в окреме вікно (хоча він це може). Найлегший спосіб почати працювати з ним - використати puppeteer.

Встановлюємо Node.js та puppeteer

curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt-get install nodejs libxss1
npm i puppeteer

Наш краулер з авторизацією crawler.js

const puppeteer = require('puppeteer');

const C = require('./credentials');
const USERNAME_SELECTOR = '#email';
const PASSWORD_SELECTOR = '#pass';
const BUTTON_SELECTOR = '#send';

const fs = require('fs');
const URLS_FILE = './urls.txt';

async function startBrowser() {
  const browser = await puppeteer.launch({
    headless: true,
    executablePath:'/home/bender/node_modules/puppeteer/.local-chromium/linux-XXXXXX/chrome-linux/chrome',
    args: ['--no-sandbox', '--disable-setuid-sandbox'],
  });
  const page = await browser.newPage();
  return {browser, page};
}

async function closeBrowser(browser) {
  return browser.close();
}

async function crawler() {
  const {browser, page} = await startBrowser();
  page.setViewport({width: 1366, height: 768});
  await page.goto(C.url);
  await page.click(USERNAME_SELECTOR);
  await page.keyboard.type(C.username);
  await page.click(PASSWORD_SELECTOR);
  await page.keyboard.type(C.password);
  await page.click(BUTTON_SELECTOR);

  const urls =fs.readFileSync(URLS_FILE, 'utf-8').split('\n');
  for (let url of urls) {
    try{
        await page.goto(url);
        console.log(`OK for url: ${url}`);
    } catch(err) {
        console.log(`An error occured on url: ${url}`);
    }
  }

  await closeBrowser(browser);

}

(async () => {
  await crawler();
  process.exit(1);
})();

Увага!!! Перевірте executablePath

Файл з даними для авторизації credentials.js

module.exports = {
                    url: 'https://examlpe.com.ua/customer/account/login',
                    username: 'mylogin',
                    password: 'mypassword'
                 }

Зписок закритих адрес urls.txt

https://examlpe.com.ua/test
https://examlpe.com.ua/test2
https://examlpe.com.ua/test2/test.html

Запуск краулера

node crawler.js

Посилання

Author

Олександр Бобилєв

Залишаю собі право використовувати ненормативну (але інформативну) лексику там, де звичайні слова втрачають сенс і не відображають всієї палітри почуттів, від споглядання навколишньої дійсності.