JavaScript для автоматизации: скучные задачи — в прошлом

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Почему JavaScript — ваш главный помощник в автоматизации

Вы когда-нибудь ловили себя на мысли, что тратите часы на однотипные действия: переименовываете сотни файлов, копируете данные из таблиц, отправляете десятки писем или проверяете, не упал ли сайт? Если да — эта статья для вас.

JavaScript давно перестал быть просто «языком для анимации кнопок». С появлением Node.js и мощных библиотек, он превратился в универсальный инструмент для автоматизации задач. И да, даже если вы Python-разработчик, JS может стать вашим секретным оружием: он работает везде — в браузере, на сервере, в облаках и даже на Raspberry Pi.

В этой статье мы разберем реальные сценарии автоматизации на JavaScript, которые сэкономят вам десятки часов. Никакой воды — только код и практика.

1. Автоматизация браузера: Puppeteer и Playwright

Представьте: нужно собрать цены с 500 страниц интернет-магазина, но API нет. Ручной копипаст? Нет, спасибо. На помощь приходит Puppeteer — библиотека для управления Chromium.

Пример: Парсинг заголовков новостей

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  
  await page.goto('https://news.ycombinator.com', { waitUntil: 'networkidle2' });
  
  const titles = await page.evaluate(() => {
    const items = document.querySelectorAll('.titleline > a');
    return Array.from(items).map(item => item.innerText);
  });
  
  console.log('Последние новости:', titles.slice(0, 10));
  
  await browser.close();
})();

Этот скрипт открывает Hacker News, собирает заголовки первых 10 новостей и выводит их в консоль. В реальной жизни вы можете добавить сохранение в CSV, отправку в Telegram или запись в базу данных.

Playwright — альтернатива с суперсилами

Если вам нужно работать с несколькими браузерами (Chrome, Firefox, Safari) или эмулировать мобильные устройства, используйте Playwright. Он быстрее, стабильнее и умеет перехватывать запросы.

2. Работа с файлами: переименование, сортировка, очистка

У вас есть папка с 1000 фотографий с именами вроде "IMG_20250101_123456.jpg"? Хотите привести их к порядку? Встроенный модуль fs (File System) в Node.js справится с этим за секунды.

Пример: Массовое переименование файлов

const fs = require('fs');
const path = require('path');

const directory = './photos';

fs.readdir(directory, (err, files) => {
  if (err) throw err;
  
  files.forEach((file, index) => {
    const ext = path.extname(file);
    const newName = `photo_${String(index + 1).padStart(4, '0')}${ext}`;
    
    fs.rename(
      path.join(directory, file),
      path.join(directory, newName),
      (err) => {
        if (err) console.error(`Ошибка с файлом ${file}:`, err);
        else console.log(`${file} → ${newName}`);
      }
    );
  });
});

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

3. Автоматизация работы с CSV и Excel (без офисного пакета)

Бизнес-задачи часто требуют обработки таблиц. Для CSV используйте встроенный модуль или библиотеку csv-parser. Для Excel — xlsx (SheetJS).

Пример: Чтение CSV и создание отчета

const fs = require('fs');
const csv = require('csv-parser');
const createCsvWriter = require('csv-writer').createObjectCsvWriter;

const results = [];

fs.createReadStream('orders.csv')
  .pipe(csv())
  .on('data', (row) => {
    if (parseFloat(row.total) > 100) {
      results.push({
        orderId: row.id,
        client: row.name,
        sum: row.total
      });
    }
  })
  .on('end', () => {
    const csvWriter = createCsvWriter({
      path: 'big_orders.csv',
      header: [
        { id: 'orderId', title: 'ID заказа' },
        { id: 'client', title: 'Клиент' },
        { id: 'sum', title: 'Сумма' }
      ]
    });
    
    csvWriter.writeRecords(results)
      .then(() => console.log('Готово! Отфильтровано заказов:', results.length));
  });

Запустили — и готов фильтр заказов на сумму более 100 единиц. Без Excel, макросов и ручного труда.

4. Автоматизация отправки email (Nodemailer)

Нужно разослать персонализированные письма клиентам? Или настроить уведомления о падении сервера? Nodemailer — стандарт де-факто для отправки email в Node.js.

Пример: Отправка письма с HTML-шаблоном

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'your@gmail.com',
    pass: 'your-app-password' // используйте пароль приложения!
  }
});

const mailOptions = {
  from: '"Автоматизатор" <your@gmail.com>',
  to: 'client@example.com, manager@example.com',
  subject: 'Еженедельный отчет готов',
  html: `<h2>Отчет за неделю</h2>
         <p>Всего заказов: <strong>42</strong></p>
         <p>Выручка: <strong>125 000 руб.</strong></p>`
};

transporter.sendMail(mailOptions, (error, info) => {
  if (error) return console.error(error);
  console.log('Письмо отправлено:', info.response);
});

Совет: никогда не храните пароли в коде. Используйте переменные окружения (process.env) или менеджер секретов.

5. Веб-хуки и интеграции: превращаем события в действия

Автоматизация на JavaScript — это не только про скрипты, но и про реакцию на события. Вы можете создать сервер на Express, который слушает веб-хуки от GitHub, Stripe, Telegram и запускает нужные действия.

Пример: Автоматический бэкап базы данных при пуше в Git

const express = require('express');
const { exec } = require('child_process');

const app = express();
app.use(express.json());

app.post('/github-webhook', (req, res) => {
  const event = req.headers['x-github-event'];
  
  if (event === 'push' && req.body.ref === 'refs/heads/main') {
    console.log('Новый коммит в main! Запускаем бэкап...');
    
    exec('pg_dump mydb > backup.sql', (err, stdout, stderr) => {
      if (err) return res.status(500).send('Backup failed');
      console.log('Бэкап создан:', stdout);
      res                

Блоги

Рекомендаций по книгам