shot-scraper 1.11: надёжнее запуск локального сервера и загрузка JavaScript из файла

12 июля 2026 года разработчик Саймон Уиллисон (автор инструментов Datasette и sqlite-utils) выпустил версию 1.11 своей утилиты shot-scraper, консольного инструмента для создания скриншотов сайтов, записи видеодемонстраций и скрапинга страниц с выполнением JavaScript. Обновление некрупное и касается в основном унификации опций командной строки и устранения гонки при запуске локального сервера.

Первое изменение затрагивает внутренний механизм server:, который используют команды shot-scraper video и shot-scraper multi для поднятия локального веб-сервера перед съёмкой. Раньше инструмент ждал ровно одну секунду перед обращением к серверу, если сервер стартовал дольше, команда падала с ошибкой. Теперь shot-scraper опрашивает порт на доступность и ждёт до 30 секунд, пока целевой URL не начнёт принимать соединения (issue #197).

Второе изменение, новая опция --js-file для команд shot-scraper, html, accessibility и har. Она позволяет подгружать JavaScript-код из локального файла, из стандартного ввода (stdin) или из репозитория на GitHub в формате gh:имя_пользователя/скрипт, как альтернативу опции --javascript, которая принимает код прямо строкой в аргументе командной строки (issue #192). Команда shot-scraper multi получила эквивалентный YAML-ключ js_file: для той же цели в пакетном режиме.

Третье изменение, опция --timeout добавлена в команды shot-scraper javascript и shot-scraper html для единообразия с остальными командами инструмента (issue #118).

Ключевые факты

  • Вышла версия 1.11 CLI-утилиты shot-scraper Саймона Уиллисона для скриншотов, видео и скрапинга сайтов
  • Механизм запуска локального сервера (server:) теперь ждёт до 30 секунд и опрашивает порт вместо фиксированной задержки в одну секунду
  • Добавлена опция --js-file для загрузки JavaScript из файла, стандартного ввода или GitHub-репозитория, альтернатива --javascript
  • shot-scraper multi получил YAML-ключ js_file: для той же функции в пакетном режиме
  • Команды javascript и html получили опцию --timeout для единообразия с другими командами инструмента

Почему это важно

Релиз сам по себе небольшой, но устраняет реальную проблему: команды shot-scraper video и shot-scraper multi раньше могли упасть с ошибкой, если локальный сервер для рендеринга страницы стартовал дольше одной секунды, из-за медленной машины, тяжёлого фреймворка или холодного старта. Замена фиксированной задержки на опрос порта с ожиданием до 30 секунд делает инструмент устойчивее в CI и на слабом железе. Опция --js-file, в свою очередь, снимает неудобство передачи многострочного JavaScript прямой строкой в командной строке.

Кому это важно

Разработчикам и инженерам, которые используют shot-scraper для автоматизации скриншотов сайтов, записи видеодемонстраций интерфейсов или скрапинга страниц с выполнением JavaScript, например, для документации, тестирования вёрстки или сбора данных. Также интересно тем, кто следит за инструментами Саймона Уиллисона (Datasette, sqlite-utils, LLM CLI) и его подходом к разработке компактных, аккуратно поддерживаемых консольных утилит.

Как это применить

Обновиться до shot-scraper 1.11 можно обычным способом установки пакета (через pip или pipx, как описано в документации проекта). После обновления команды shot-scraper, html, accessibility и har принимают JavaScript-код через --js-file <путь>, через стандартный ввод или ссылкой вида gh:username/script, вместо вставки кода строкой в --javascript. В конфигурации для shot-scraper multi аналогичная загрузка задаётся YAML-ключом js_file:. Для команд javascript и html теперь доступна опция --timeout, задающая предел ожидания.

Можно ли доверять

Новость взята напрямую из блога Саймона Уиллисона, автора и мейнтейнера shot-scraper, публикующего подробные заметки о релизах своих проектов со ссылками на конкретные issue на GitHub (#197, #192, #118). Это первоисточник, факты не требуют дополнительной проверки третьими сторонами.

Риски и подводные камни

Изменения обратно совместимы и не ломают существующие сценарии, --javascript продолжает работать как раньше, --js-file добавлена как альтернатива. Из практических нюансов: увеличенный тайм-аут ожидания сервера (до 30 секунд вместо одной) может дольше маскировать проблему, если локальный сервер вообще не поднимается, команда будет ждать полные 30 секунд, прежде чем сообщить об ошибке.