"Прогрівання" кешу для закритих частин сайту за допомогою 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