Чтобы создать скрипт автоматизации с ИИ, вы описываете повторяющуюся задачу кодинг-агенту и проверяете небольшой скрипт на Python, который он пишет. Переименование файлов, объединение файлов Excel и CSV, еженедельный отчёт по почте или парсер, отслеживающий цены на сайте, обычно укладываются в 50–200 строк. Сложно не написать промпт, а точно описать входные данные, проверить результат, поставить скрипт на расписание и вовремя узнать, что он сломался.
В статье весь путь от нуля до работающей автоматизации: что установить, какой инструмент и когда выбрать, что сказать агенту первым, как тестировать и как запускать скрипт каждый день через cron. Я также затрагиваю правовую и этическую сторону парсинга, потому что ИИ не будет думать об этом за вас.
Что здесь значит «автоматизация с ИИ»
Я не имею в виду модель, которая сама выполняет работу каждый раз. Агент пишет скрипт один раз; дальше скрипт каждый день работает одинаково и без всякого ИИ. Разница важна: скрипт дёшев, воспроизводим, и вы можете прочитать, что он делает. Схема, где модель вызывается каждый день, стоит дороже, и её труднее предсказать.
Это vibe coding: вы не пишете код построчно, а описываете, что хотите, и направляете результат. Автоматизации для этого хорошо подходят, потому что цель ясна, а результат легко проверить: правильно ли названы файлы, те ли строки в таблице?
Какие задачи стоит автоматизировать?
Хороший кандидат часто повторяется, подчиняется правилам, которые можно записать, и его можно отменить, если что-то пошло не так. Типичные примеры:
- Файлы: переименовать счета в папке Downloads по дате и разложить их по папкам год/месяц.
- Excel и CSV: объединить файлы продаж, которые присылает каждый филиал, убрать пустые строки, собрать сводный лист.
- Отчёты по почте: раз в неделю брать данные из папки или базы и отправлять сводку себе или команде.
- Слежение за сайтами: отслеживать цену товара, новые записи на странице объявлений или анонсов и получать уведомление об изменениях.
Если решение должен принимать человек (оплата кому-то, отправка договора), остановите автоматизацию на шаге «подготовь, я утвержу».
Шаг 1: установите инструменты
Нужны кодинг-агент и Python. Подойдёт любой терминальный кодинг-агент: Claude Code, Codex, Gemini CLI или Aider умеют читать и писать файлы и запускать команды.
# Is Python 3 installed?
python3 --version
# project folder and virtual environment
mkdir invoice-sorter && cd invoice-sorter
git init
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
Почему Python? Библиотеки для автоматизации зрелые: pandas и openpyxl для таблиц, requests для HTTP, beautifulsoup4 для разбора HTML, playwright для браузера. Агенты видели много кода с ними и ошибаются реже. Если папка проекта — git-репозиторий, любое изменение агента можно откатить.
Шаг 2: первый промпт
Расплывчатая просьба даёт расплывчатый скрипт. В хорошем первом сообщении есть вход, выход, правила и граничные случаи. Положите в папку два-три настоящих примера файлов (выдуманных, если в них персональные данные) и направьте агента к ним:
Write a Python script: rename_invoices.py
Input: PDF invoices in ./inbox. Examples are in ./samples.
Page one of each PDF has an "Invoice date: DD/MM/YYYY" line and a "Company:" line.
What it does:
- Rename the file to YYYY-MM-DD_company-name.pdf (lowercase, hyphens instead of spaces).
- Move it to ./archive/YYYY/MM/.
- If the date or company can’t be read, leave the file alone, copy it to ./failed and log it.
Rules:
- Run as --dry-run by default: print what it would do, touch nothing.
- Require an --apply flag for the real run.
- Never overwrite an existing file; append -2 instead.
- List dependencies in requirements.txt.
- When done, run it on ./samples with --dry-run and show me the output.
Два правила отсюда стоит переносить в каждую автоматизацию: пробный запуск по умолчанию и никогда не перезаписывать. Если агент неверно прочитает дату, вы получите список для проверки, а не сотни файлов, перенесённых не туда.
Шаг 3: итерации и тесты
Первая версия редко справляется со всеми файлами. Цикл такой:
- Прочитайте вывод
--dry-run. Что-нибудь сопоставлено неверно? - Покажите агенту проблемный файл: «
samples/invoice_7.pdfполучил дату 1970-01-01; в этом файле метка называется “Issue date”. Поддержи обе». - Попросите добавить небольшой тест на этот случай. Хватит нескольких примеров файлов и
pytest. - Когда всё выглядит правильно, сначала запустите
--applyна копии, потом на настоящей папке.
Для задач с Excel и CSV проверка проще: сравните число строк на входе с итогами на выходе. Пусть сам скрипт проверяет что-то вроде «в объединённом файле должно быть 1 240 строк и такая-то сумма выручки». То, что код запускается, ещё не доказывает, что он считает правильно.
Шаг 4: парсер — requests или Playwright?
Первое решение в парсинге — как устроена страница. Щёлкните правой кнопкой, выберите «Просмотр кода страницы» и поищите там нужные данные (цену, заголовок).
Если они есть в исходном коде, достаточно requests и BeautifulSoup. Они быстрые, не открывают браузер и мало нагружают сервер.
import requests
from bs4 import BeautifulSoup
HEADERS = {"User-Agent": "price-tracker/1.0 (contact@example.com)"}
resp = requests.get("https://example.com/product/123", headers=HEADERS, timeout=20)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
price = soup.select_one(".product-price")
if price is None:
raise RuntimeError("Price element not found; the page layout may have changed")
print(price.get_text(strip=True))
Если содержимое приходит позже через JavaScript, или нужно войти, кликнуть и прокрутить, понадобится настоящий браузер. Частый выбор — Playwright:
pip install playwright
playwright install chromium
Не говорите агенту, что использовать; попросите сначала проверить:
I want the product names and prices from https://example.com/category/headphones.
First check robots.txt and the page source: is the data in the HTML, or loaded
by JavaScript? If the site has a public API or a JSON endpoint, prefer it.
Then pick the simplest approach and explain why.
Wait at least 3 seconds between requests and visit at most 5 pages.
Write the result to products.csv.
Совет: на многих сайтах, которые вы открываете через Playwright, вкладка сети браузера показывает, что данные на самом деле приходят JSON-запросом. Прямое обращение к этой конечной точке может быть надёжнее и легче, хотя условия сайта всё равно действуют.
Правовые и этические границы: robots.txt, условия, GDPR
ИИ охотно напишет код, который парсит сайт; стоит ли это делать, решаете вы. Это не юридическая консультация, а мои рабочие правила:
- Сначала официальный API. Многие сайты, биржи, службы доставки и госорганы отдают данные через API. Он стабильнее, его правила прописаны явно, и он не ломается при смене дизайна страницы.
- Читайте robots.txt и условия использования. Если условия запрещают автоматический доступ или robots.txt закрывает путь, не делайте этого. Парсинг страниц за логином обычно нарушает условия.
- Держитесь подальше от персональных данных. Сбор имён, телефонов или адресов почты подпадает под GDPR (а в Турции под KVKK); без цели, правового основания и срока хранения не собирайте их.
- Не спешите. Делайте паузу в несколько секунд между запросами, отправляйте по одному, не загружайте повторно страницы, которые у вас уже есть. Используйте User-Agent, который вас идентифицирует.
- Помните об авторском праве. Следить за ценой для себя — одно, а копировать чужой контент и публиковать его заново — другое.
- Не воюйте с защитой. Решение CAPTCHA, ротация IP или обход защиты входа — признаки того, что сайт не хочет вас видеть.
Шаг 5: ошибки, повторы и оповещения
Скрипт, который работает сегодня, тихо ломается на следующей неделе: сайт меняет вёрстку, кто-то добавляет столбец в таблицу, пропадает сеть. Если попросить об этом заранее, проблем будет меньше:
Harden the script for daily use:
- Add timeouts to network requests; on transient errors (connection error, 429, 5xx)
retry up to 3 times with increasing waits. Don’t retry 4xx errors.
- Log every run to logs/YYYY-MM-DD.log.
- Treat zero results, or a missing expected field, as an error.
- On error, email me using the SMTP settings in .env, with a summary of the error
and the path of the log file.
- Send nothing on success.
«Нулевой результат — это ошибка» — правило, которое окупается больше всего. Большинство парсеров при поломке не падают, а выдают пустой CSV. Вместо почты можно использовать вебхуки и API ботов Slack или Telegram; выберите то, что вы действительно заметите.
Шаг 6: расписание через cron
Когда скрипт готов, самый простой способ запускать его регулярно на macOS и Linux — cron. Выполните crontab -e и добавьте:
# Run every day at 08:30
30 8 * * * cd /Users/you/price-tracker && .venv/bin/python track.py >> logs/cron.log 2>&1
На что обратить внимание:
- cron не загружает окружение вашей оболочки. Используйте полный путь к Python (тот, что в виртуальном окружении) и делайте
cdв папку. - cron не работает, пока компьютер спит. Для задач, которые должны выполняться каждый день, надёжнее небольшой Linux-сервер или запланированный workflow GitHub Actions.
- На Windows ту же работу делает Планировщик заданий; попросите у агента файл
.batи шаги настройки. - Первую неделю проверяйте логи каждый день.
В чём ИИ обычно ошибается
- Выдумывает селекторы. Не видя страницы, агент угадывает CSS-класс вроде
.price. Дайте ему настоящий HTML или попросите скачать и изучить страницу. - Глотает ошибки. Блок
except: passсоздаёт впечатление, что скрипт работает, хотя он ничего не делает. Читайте каждую строкуexcept. - Форматы дат и чисел. Числа в европейском стиле
1.234,56и датыDD/MM/YYYYчасто читаются неверно. Сверьте несколько значений на выходе с источником вручную. - Кодировка. Если CSV с диакритическими или кириллическими символами выглядит искажённым, попросите попробовать
utf-8-sigили нужную старую кодировку. - Чрезмерно уверенные сообщения об успехе. «Скрипт готов и протестирован» само по себе не доказательство. Посмотрите на результат сами.
- Слишком много зависимостей. Запускать автоматизацию браузера или фреймворк ради задачи на десять строк. Просите самое простое решение.
Безопасность
- Секреты хранятся в
.env. Пароли SMTP, API-ключи и логины никогда не пишутся в код; читайте их из.envчерезpython-dotenvи добавьте.envв.gitignore. Коммитьте.env.exampleс фиктивными значениями. - Никогда не вставляйте ключ в чат. Не пишите агенту «мой ключ — …». Разговоры могут сохраняться и попадать в логи. Давайте только имя переменной: «читай её из переменной окружения
SMTP_PASSWORD». - Читайте команды, которые запускает агент. Особенно
rm, массовыйmv,pip installнезнакомых пакетов и всё, что отправляет данные наружу. Если не уверены, не одобряйте. - Минимум прав. Используйте пароль приложения для почтового аккаунта и ключ только для чтения для API.
Как это делается в AgentVera
Всё это работает в обычном терминале с одним агентом. Когда я запускаю несколько автоматизаций сразу, я использую AgentVera: он упрощает несколько шагов:
- Разные агенты, разные папки. В рабочем пространстве Claude Code может писать парсер в одной панели, пока Codex собирает отчёт Excel в другой. Если у них общий репозиторий, дайте каждому свой git worktree, чтобы избежать конфликтов.
- Браузер агента. Агенты с Playwright управляют Chrome с собственным профилем, а вы наблюдаете за их действиями вживую в браузере агента. Так проще понять, почему селектор не совпадает.
- Запуск на сервере. На странице SSH и SFTP можно скопировать скрипт на сервер и настроить там crontab.
- Запланированные сообщения агенту. Запланированные задачи планируют сообщение агенту, а не ваш скрипт. Например, раз в неделю: «прочитай логи и кратко опиши сбои». Ежедневный запуск по-прежнему должен делать cron.
- Просмотр diff. Ревью кода проверяет каждый завершённый ход, что помогает ловить проглоченные ошибки на шаге усиления надёжности.
Если хотите связать агентов в цепочку, смотрите конвейеры рабочего процесса ИИ-агентов; чтобы подключить агента к внешним инструментам, смотрите что такое MCP-сервер.
Краткий чек-лист
- Вход, выход и граничные случаи записаны в первом промпте
- Пробный запуск по умолчанию, без перезаписи
- Проверено на примерах файлов, несколько результатов сверены вручную
- Официальный API предпочтён, где он есть; robots.txt и условия прочитаны
- Паузы между запросами, таймауты и ограниченные повторы
- Нулевой результат считается сбоем, сбои отправляют оповещение
- Секреты в
.env,.envвне git - Полные пути в строке cron, логи проверены в первую неделю
Подводим итоги
Секрет автоматизаций с ИИ в том, чтобы дать агенту небольшую, хорошо описанную задачу, а потом относиться к написанному скрипту как к программному обеспечению: пробные запуски, тесты, логи, оповещения. В парсинге технический выбор прост (requests, если данные в исходном коде, иначе Playwright); труднее соблюдать границы и выбирать официальный путь там, где он есть. Для первой автоматизации возьмите задачу, которую вы делали вручную трижды на этой неделе, адаптируйте промпт выше и начните с пробного запуска.