Python
Как запустить расширение в браузере через Python: Selenium, Chrome profile и ограничения
Python сам по себе не устанавливает расширения в уже открытый Chrome. Обычно задача решается так: Python запускает новый экземпляр браузера через Selenium, а Selenium передает Chrome расширение или готовый профиль пользователя
Самая понятная схема выглядит так
Python script -> Selenium WebDriver -> Chrome -> расширение
Если вам нужно просто скачать HTML страницы, расширение не нужно. Достаточно requests или requests-html. Расширения нужны тогда, когда вы хотите работать именно с браузером: вкладками, авторизацией, UI, cookies, devtools-поведением или расширением вроде adblock, proxy manager, crypto wallet, помощника для тестирования
Вариант 1: запустить Chrome с файлом расширения CRX
Если у вас есть файл расширения .crx, его можно передать в Chrome options
Сначала установите Selenium
python -m pip install selenium
Пример кода
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_extension("my_extension.crx")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
input("Нажмите Enter, чтобы закрыть браузер")
driver.quit()
Файл my_extension.crx должен лежать рядом с вашим скриптом или путь к нему нужно указать полностью
options.add_extension("/Users/name/extensions/my_extension.crx")
На Windows путь может выглядеть так
options.add_extension(r"C:\Users\Name\extensions\my_extension.crx")
Буква r перед строкой нужна, чтобы обратные слэши не воспринимались как спецсимволы
Вариант 2: запустить Chrome с готовым профилем
Если расширение уже установлено в вашем Chrome-профиле, можно попробовать запустить Selenium с пользовательским профилем
Пример для отдельного тестового профиля
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--user-data-dir=/Users/name/selenium-chrome-profile")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
input("Проверьте расширение и нажмите Enter")
driver.quit()
Важно: лучше использовать отдельный профиль для автоматизации, а не основной профиль, где вы постоянно работаете. Так безопаснее и меньше шансов получить конфликт «profile is already in use»
Если Chrome уже открыт с этим профилем, Selenium может не запуститься. Закройте Chrome или используйте другой user-data-dir
Вариант 3: распакованное расширение
В разработке расширения часто лежат не в .crx, а в папке с manifest.json
Для такого случая в Chrome можно передать аргумент --load-extension
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
extension_path = "/Users/name/projects/my-extension"
options = Options()
options.add_argument(f"--load-extension={extension_path}")
driver = webdriver.Chrome(options=options)
driver.get("chrome://extensions/")
input("Нажмите Enter, чтобы закрыть браузер")
driver.quit()
Если расширение не появилось, проверьте, что в папке действительно есть manifest.json
Почему headless-режим может мешать
Многие расширения плохо работают или вообще не работают в headless-режиме, потому что им нужен полноценный интерфейс браузера
Для проверки сначала запускайте обычное окно Chrome без --headless
Так вы увидите, загрузилось ли расширение, открылось ли окно и нет ли ошибки в интерфейсе Chrome
Как понять, что расширение запустилось
Проверьте по шагам
- Открылось новое окно Chrome
- На странице
chrome://extensions/видно расширение - В консоли нет ошибки о неправильном пути
- Профиль Chrome не заблокирован другим процессом
- Версия Chrome и Selenium совместимы
Для учебной проверки можно открыть страницу расширений
driver.get("chrome://extensions/")
Но взаимодействовать со служебными страницами Chrome через Selenium может быть ограничено. Это нормально: задача здесь не управлять страницей расширений, а проверить, что браузер стартует с нужной конфигурацией
Частые ошибки
selenium.common.exceptions.SessionNotCreatedException
Часто означает проблему с версией Chrome, драйвером или профилем
Обновите Selenium
python -m pip install --upgrade selenium
Проверьте, что Chrome установлен и запускается вручную
Файл расширения не найден
Путь указан неправильно
Проверьте путь через Python
from pathlib import Path
path = Path("my_extension.crx")
print(path.resolve())
print(path.exists())
Если False, Python смотрит не туда. Укажите полный путь или положите файл рядом со скриптом
Chrome пишет, что профиль уже используется
Вы пытаетесь открыть один и тот же профиль двумя процессами
Закройте Chrome или задайте отдельную папку профиля
options.add_argument("--user-data-dir=/tmp/selenium-profile-test")
Расширение есть в обычном Chrome, но Selenium его не видит
Selenium запускает отдельный браузерный профиль. Ваши обычные расширения туда автоматически не переносятся
Используйте .crx, --load-extension или отдельный user-data-dir
Чего Python не сможет сделать напрямую
Python не может «вклеить» расширение в уже открытую вкладку обычного Chrome так, как будто пользователь нажал кнопку в браузере
Python может
- запустить новый управляемый браузер
- открыть страницу
- кликать по элементам
- передать Chrome настройки запуска
- использовать профиль или расширение при старте
Python не должен
- обходить ограничения сайтов
- перехватывать чужие учетные данные
- автоматизировать действия, которые нарушают правила сервиса
Это не моральная вставка ради галочки, а практическая вещь: такие сценарии быстро ломаются, блокируются и создают проблемы с аккаунтами
Мини-практика
Для первого теста не берите сложное расширение. Создайте отдельный профиль и просто запустите Chrome через Selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--user-data-dir=selenium-profile")
driver = webdriver.Chrome(options=options)
driver.get("https://www.python.org/")
input("Браузер открыт. Нажмите Enter для закрытия")
driver.quit()
Если это работает, переходите к расширению. Так проще понять, где проблема: в Selenium, профиле или самом расширении
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Python как считает вкладки в браузере: window_handles в Selenium
- Python сразу закрывает браузер: как исправить в Selenium и обычном запуске
- Python открыть ссылку в новой вкладке: webbrowser и Selenium
- element.get_attribute в Python Selenium: как получить href, class, value и другие атрибуты