Проверка сайта на доступность с помощью Python

В таск-трекере приходит мне задача: «Разработать автоматизированные тесты для проверки важных ссылок на сайте».
«Отлично! Сейчас возьму selenium и наделаю тестов!», — подумал я.
Потом подумал еще.
Спросил программистов.
Скрипт будет запускаться на linux-сервере как по cron, так и, при особой необходимости, руками.
А надо ли тогда мне заморачиваться с этим селениумом, а потом программистам устанавливать его на сервере, если всего-то навсего нужно проверить статус страницы — или 200, или 301. Больше ничего и не требовалось.
За неделю до этого один из коллег-программистов нахваливал мне Python.

«Все это неслучайно! Сначала мне рекомендуют Питон, а теперь нужно написать скрипт. Google в руки — и вперёд!»

Быстрый гуглёж подсказал две полезные ссылки — собственно проверку url-а и доку в стиле «изучаем основы python за день».

Из этого получился вот такой скрипт из нескольких строк:


Далее оборачиваем это хозяйство в try/catch:

Собственно, проверка «живости» сайта уже выполняется.

Но кроме основной страницы хочется проверять еще и некоторые другие, доступность которых крайне важна. Добавляем массивы для списков страниц и преобразуем код проверки в функцию:

Теперь проверяется все, что нужно. А вот как узнавать результаты? Будем отправлять их на электронную почту себе, разработчику, а в дальнейшем и всем остальным заинтересованным лицам.

Добавляем в скрипт генерацию соообщения и его отправку:

Итого: решенная задача, скрипт в несколько десятков строк и базовые знания Python.

  • сильно подозреваю, что устанавливать selenium для этого ненужно, достаточно запускать из под того же питона HtmlUnitDriver  или как его там зовут.

    • Может быть.

      Впрочем, сама проверка занимает всего 10 строчек, так что городить еще что-то, имхо, не нужно.

      • зависит от задачи, разумеется, я раньше тоже проверял код возврата, однако выяснилось, что конфигурируют приложение невнимательные и иногда криворукие люди, и 200-то вернётся, а отобразится совершенно не та страница на том же урле

  • Позволю себе немного покритиковать код

    1. Импорт array не нужен.

    2. print page_url, " — «, code  более кошерно(имхо) print „{0} — {1}“ % (page_url, code)

    3. Код возврата страницы я бы поверял как  code in [200, 301]. Python way ;)

    4. Пэкедж string объявлен как deprecated. list = string.join ((list, failed_link), „rn“) -> »rn".join ((list, failed_link)) 

    Попрограммировав достаточно плотно на Python 3 месяца(кстати, произносится как Пайтон и ничего общего со змеями не имеет ;)), я просто влюбился в этот язык. Подкупает то, что на нем можно начать писать что-то реальное полезное прямо в первый день изучения. Он не позволит тебе выстрелить себе же в ногу, в отличие от C++ ) Обширная библиотека + еще 100500 пэкеджей на все случаи жизни на pypi.python.org и это все работает на куче платформ. В частности, гипервизор VMware ESXi содержит в себе Python, что собственно и послужило причиной знакомства и языком )

    • Спасибо за замечания, код поправил.

      Единственное — докуменация по Python не советует использовать %, вместо этого лучше использовать .format:

      print "{0} - {1}".format(page_url, code)