Автоматизация Firefox и Chrome из Excel с помощью Selenium VBA

Зачем использовать Selenium VBA
Selenium VBA — это мост между Excel (или любым приложением, где можно писать VBA) и современными браузерами. В отличие от Internet Explorer, который предоставляет встроенный COM-объект в Windows, для Firefox и Chrome нужен дополнительный компонент. Selenium VBA предоставляет этот компонент и позволяет:
- запускать браузеры (Firefox, Chrome и другие);
- открывать URL, переключаться между вкладками и имитировать ввод;
- работать с элементами страницы, управлять навигацией и т. д.
Важно: сам по себе Selenium VBA не является браузером. Это COM-обёртка, которая посылает команды реальному WebDriver браузера.
Короткие определения
- Selenium VBA: Windows COM-обёртка для Selenium, доступная как библиотека ссылок в VBA.
- WebDriver: API, через который Selenium управляет браузером.
Что вам потребуется (проверочный список)
- Windows с установленным Excel, где доступно написание макросов.
- Права для установки ПО на машине (установка обёртки Selenium).
- Установленные браузеры: Firefox и/или Chrome.
- Базовые навыки работы с VBA: добавление кнопки ActiveX, просмотр редактора кода.
Подготовка: установка Selenium VBA
- Скачайте и установите Windows COM-обёртку Selenium VBA по официальным инструкциям проекта, которому вы доверяете.
- Запустите Excel и откройте книгу, где будут храниться URL.
- Перейдите в лист с URL и включите вкладку разработчика, если её нет.
Примечание: в разных окружениях проект-обёртка может называться по-разному. Ищите по запросу «Selenium VBA COM wrapper» или «Selenium Basic». Если вы в корпоративной сети, согласуйте установку с ИТ.
Шаг за шагом: добавление кнопки и подключение библиотеки
- В Excel откройте вкладку ‘Разработчик’ (Developer).
- Нажмите ‘Вставить’ (Insert) и выберите элемент ActiveX-кнопки. Нарисуйте кнопку на листе.
- Кликните по кнопке правой кнопкой и выберите ‘Просмотреть код’ (View Code).
- В редакторе свойств в левом нижнем углу измените поля ‘Name’ и ‘Caption’ на понятные вам значения — например, Name = cmdLoadURLs, Caption = Загрузить URL.
- В редакторе VBA зайдите в меню ‘Сервис’ (Tools) → ‘Ссылки’ (References) и найдите элемент с именем ‘SeleniumWrapper Type Library’ или похожее название. Отметьте галочкой и нажмите OK.
Пример кода: открыть список URL в отдельных вкладках
Ниже — минимальный пример, адаптированный под Excel. Код запускает Firefox, открывает первый URL из столбца A и затем открывает все остальные URL из списка в новых вкладках.
Dim selenium As New SeleniumWrapper.WebDriver
Dim FF As Object
Dim intRowPosition As Integer
Dim keys As New SeleniumWrapper.keys
selenium.Start "firefox", "https://www.google.com"
selenium.setTimeout ("120000")
selenium.setImplicitWait (5000)
intRowPosition = 2
selenium.Open Sheet1.Range("A" & intRowPosition)Объяснение основных частей:
- Dim selenium As New SeleniumWrapper.WebDriver — создаёт объект WebDriver через обёртку.
- selenium.Start “firefox”, “https://www.google.com” — запускает экземпляр браузера (второй аргумент не обязателен, но часто используют стартовую страницу).
- setTimeout и setImplicitWait — помогают избежать «подвешивания» скрипта при медленном отклике.
- selenium.Open Sheet1.Range(“A” & intRowPosition) — читает URL из ячейки и открывает его.
Далее — цикл, который переходит по строкам и открывает каждую ссылку в новой вкладке:
intRowPosition = intRowPosition + 1
While Sheet1.Range("A" & intRowPosition) <> vbNullString
selenium.SendKeys keys.Control & "t"
selenium.Open Sheet1.Range("A" & intRowPosition)
intRowPosition = intRowPosition + 1
Wend
Set IE = NothingПримечания к коду:
- selenium.SendKeys keys.Control & “t” — эмулирует комбинацию Ctrl+T для открытия новой вкладки. Поведение может зависеть от локали и раскладки клавиатуры.
- Loop продолжается до тех пор, пока не встретит пустую ячейку в столбце A.
- Для Chrome достаточно поменять selenium.Start ‘firefox’ на selenium.Start ‘chrome’.
Советы по отладке и надёжности
- Увеличьте setTimeout при медленном интернет-соединении.
- Используйте setImplicitWait для ожидания загрузки элементов.
- Добавьте обработку ошибок: конструкция On Error GoTo ErrHandler пригодится для освобождения объектов и корректного завершения.
- Для сайтов с авторизацией автоматизация может потребовать дополнительных шагов (ввод логина/пароля, обработка CAPTCHA). CAPTCHA обычно нельзя обойти программно — это защитный механизм.
Важное: тестируйте скрипт на небольшом наборе URL перед массовым запуском.
Возможные проблемы и их решения
- Браузер не стартует: проверьте, установлен ли WebDriver для выбранного браузера и корректна ли версия обёртки.
- Команды SendKeys работают нестабильно: используйте методы WebDriver, которые взаимодействуют с элементами страницы напрямую, если возможно.
- Права доступа: в рабочей среде часто требуется администратор для установки COM-обёртки.
Альтернативные подходы и когда их выбрать
- PowerShell + Selenium WebDriver
- Подходит, если вы предпочитаете сценарии вне Excel и хотите централизовать автоматизацию.
- Python + Selenium
- Лучший выбор для сложной автоматизации, парсинга и тестирования. Python имеет богатую экосистему библиотек.
- Использовать встроенный COM-объект Internet Explorer
- Прост в Excel, но устарел и поддерживает ограниченный набор современных веб-страниц.
Выбор зависит от масштаба задачи: для простого открытия URL из таблицы достаточно Selenium VBA. Для сложной логики и парсинга лучше Python.
Ментальные модели и эвристики
- «Команды и ожидания»: всегда думайте, что каждая команда может требовать ожидания. Всегда ставьте таймауты.
- «UI-first vs API-first»: если сайт предоставляет API — используйте его вместо эмуляции браузера. Это быстрее и надёжнее.
- «Минимизируй поверхность атаки»: открывайте только те вкладки, которые нужны, и удаляйте объекты после использования.
Роль‑ориентированные чеклисты
Для разработчика:
- Установлена библиотека Selenium VBA.
- Добавлена кнопка ActiveX и подключена ссылка.
- Код покрыт базовой обработкой ошибок.
Для администратора:
- Разрешена установка COM-обёртки.
- Проверены версии браузеров и WebDriver.
Для аналитика/пользователя:
- Таблица с URL подготовлена и проверена на валидность.
- Есть резервный список на случай ошибок.
Проверочные критерии (Критерии приёмки)
- Скрипт запускает браузер выбранного вида.
- Первый URL из столбца A открывается в первой вкладке.
- Каждая последующая непустая строка открывается в отдельной вкладке.
- Скрипт корректно завершается и освобождает объекты.
Playbook: развёртывание и запуск
- Проверить, что Excel имеет доступ к макросам.
- Установить Selenium VBA и проверить наличие ссылки в References.
- Поместить список URL в столбец A, начиная с A2.
- Запустить макрос через кнопку.
- Наблюдать за выполнением и проверять логи (при их наличии).
Техническая совместимость и подсказки по миграции
- Firefox и Chrome: оба поддержимы через соответствующие WebDriver’ы. Возможны различия в поведении SendKeys.
- Edge (Chromium): обычно совместим с командами Chromium; проверяйте отдельной проверкой.
- Если в будущем вы захотите уйти от VBA, миграция на Python/Selenium обычно менее трудозатратна, чем на другие платформы.
Безопасность и конфиденциальность
- Не храните в открытом виде учётные данные на листах Excel. Используйте защищённые хранилища или ввод при запуске скрипта.
- Автоматизация, открывающая множество вкладок, может потреблять ресурсы. Следите за памятью и лимитами.
- Уважайте правила сайтов: массовый автоматизированный доступ может нарушать условия обслуживания.
Небольшой чеклист по отладке (быстрые шаги)
- Запустите скрипт в режиме пошаговой отладки (F8) и наблюдайте значения переменных.
- Проверьте, что SeleniumWrapper есть в списке ссылок.
- Попробуйте открыть фиксированный URL из кода, чтобы исключить проблемы с чтением ячейки.
Шаблон логики для расширения (идеи)
- Добавить столбец с параметрами времени ожидания для отдельных URL.
- Логировать ошибки в отдельный лист Excel.
- Добавить кнопку для остановки выполнения скрипта.
Маленькая библиотека часто используемых сниппетов
- Запуск Chrome вместо Firefox: замените аргумент при старте браузера на ‘chrome’.
- Получение текущего URL: используйте свойство .URL у WebDriver для получения адреса активной вкладки.
Когда Selenium VBA не подходит (примеры)
- Нужно выполнять масштабируемый парсинг большого объёма данных — лучше использовать серверный Python-скрипт.
- Сайты с глубокой защитой от роботов и CAPTCHA — автоматизация потребует дополнительных интеграций или ручной валидации.
Короткий глоссарий
- WebDriver — интерфейс, управляющий браузером.
- COM-обёртка — компонент, который делает программную библиотеку доступной через COM (VBA).
- SendKeys — метод для эмуляции нажатия клавиш.
Заключение
Selenium VBA даёт простой и практичный путь управлять современными браузерами прямо из Excel. Это особенно удобно для пользователей, которые хранят списки задач и ссылок в таблицах и хотят быстро открывать их в браузере. Начните с малого: подготовьте 5–10 ссылок, протестируйте скрипт и постепенно добавляйте обработку ошибок и логирование.
Короткий план действий: установить обёртку → подключить библиотеку в References → добавить кнопку ActiveX → вставить и протестировать код.
Если вы готовы к следующему шагу, подумайте о переносе логики в отдельное приложение (PowerShell или Python) для более сложных сценариев и лучшей масштабируемости.
Счастливой автоматизации!