Решение проблемы SessionNotCreatedException в Google Colab
Узнайте, как исправить ошибку SessionNotCreatedException с Chrome WebDriver в Google Colab. Узнайте о причинах возникновения, немедленных решениях и мерах профилактики для этой распространенной проблемы.
Selenium SessionNotCreatedException в Google Colab: Экземпляр Chrome завершил работу
Я столкнулся с ошибкой SessionNotCreatedException при использовании Chrome WebDriver в Google Colab, которая начала возникать примерно 16 часов назад (UTC). Сообщение об ошибке: “session not created: Chrome instance exited.”
Следующий код стабильно работал до вчерашнего дня, но теперь аварийно завершается на этапе инициализации драйвера:
#без вывода, адаптированный для kaggle
# =========================================
# ШАГ 1 — УСТАНОВКА ЗАВИСИМОСТЕЙ
# =========================================
!apt-get update -qq
!apt-get install -qq chromium-chromedriver
!pip install -q selenium tabulate ipywidgets pillow pandas requests openpyxl
# =========================================
# ШАГ 2 — ИМПОРТЫ
# =========================================
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import StaleElementReferenceException, TimeoutException
from google.colab import files
from IPython.display import display, clear_output
import ipywidgets as widgets
import pandas as pd
import requests, time
from datetime import datetime
import re
from os.path import join
import time
import IPython
import os
# =========================================
# ШАГ 3 — КОНФИГУРАЦИЯ ДРАЙВЕРА
# =========================================
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options=chrome_options)
wait = WebDriverWait(driver, 15)
url = "https://opcoes.net.br/opcoes/bovespa/AMBP3"
driver.get(url)
time.sleep(2)
Подробный лог драйвера не содержит дополнительной информации. Сталкивался ли кто-нибудь недавно с этой проблемой, и что может вызывать такое внезапное изменение поведения?
Исключение SessionNotCreatedException с сообщением “Chrome instance exited” в Google Colab, по-видимому, является недавним изменением среды, которое влияет на инициализацию Chrome WebDriver, вероятно, из-за обновлений базовой инфраструктуры Colab или совместимости с браузером Chrome. Эта проблема была отмечена несколькими пользователями, начиная с периода, который вы упомянули, и затрагивает стандартные реализации Selenium, которые ранее работали без проблем.
Содержание
- Понимание проблемы
- Анализ коренных причин
- Немедленные решения
- Продвинутые обходные пути
- Профилактические меры
- Лучшие практики для будущей совместимости
Понимание проблемы
Исключение SessionNotCreatedException, с которым вы сталкиваетесь, возникает, когда Selenium пытается инициализировать сеанс Chrome WebDriver, но Chrome не запускается должным образом, вызывая завершение работы процесса браузера до создания сеанса. Это отличается от традиционных ошибок “драйвер не найден” - здесь сам Chrome не может запуститься.
Как сообщают пользователи Stack Overflow, многие разработчики, у которых работающие реализации Selenium в Colab, внезапно столкнулись с этой ошибкой примерно 16 часов назад по UTC, что полностью соответствует вашему временному промежутку. Ошибка последовательно проявляется как:
SessionNotCreatedException: Message: session not created: Chrome instance exited
Это указывает на системное изменение в среде Google Colab, а не на индивидуальные проблемы конфигурации.
Анализ коренных причин
На основе результатов исследования были выявлены несколько потенциальных причин:
1. Обновления браузера Chrome
Google Colab часто обновляет версию браузера Chrome, что может нарушить совместимость с существующими установками ChromeDriver. Когда Chrome обновляется, а ChromeDriver нет, возникают несоответствия версий.
2. Изменения в политике безопасности
Недавние изменения в политике безопасности Colab могут препятствовать запуску Chrome в безголовом режиме (headless) или доступу к определенным системным ресурсам, необходимым для сеансов WebDriver.
3. Проблемы с выделением ресурсов
Colab мог изменить выделение ресурсов для экземпляров блокнотов, потенциально вызывая завершение работы процессов Chrome до их полной инициализации.
4. Изменения в среде контейнеров
Модификации базовой среды контейнеров могут влиять на то, как браузеры Chrome запускаются и управляются в инфраструктуре Colab.
Как отметил один из пользователей Reddit, ошибка “Chrome failed to start: exited normally” указывает на то, что процесс браузера завершается системой, а не по собственной инициативе.
Немедленные решения
Вот несколько подходов для решения этой проблемы, начиная с наиболее вероятных исправлений:
Решение 1: Обновление установки ChromeDriver
# Установка последнего ChromeDriver, совместимого с Chrome в Colab
!apt-get update -qq
!apt-get install -qq chromium-chromedriver
!apt-get install -y chromium-browser
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
Согласно этому ответу на Stack Overflow, важно, чтобы ChromeDriver соответствовал версии Chrome для более новых версий Selenium.
Решение 2: Использование объекта Service (Selenium 4.10+)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--window-size=1920,1080")
# Использование объекта Service вместо прямого вызова Chrome()
service = Service('/usr/bin/chromedriver')
driver = webdriver.Chrome(service=service, options=chrome_options)
Решение 3: Альтернативные аргументы Chrome
Попробуйте различные параметры конфигурации Chrome:
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-plugins")
chrome_options.add_argument("--disable-images")
chrome_options.add_argument("--disable-javascript")
chrome_options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Chrome(options=chrome_options)
Продвинутые обходные пути
Если базовые решения не работают, рассмотрите эти более надежные подходы:
Решение 4: Использование SeleniumBase
SeleniumBase обеспечивает лучшую совместимость со средами Colab:
!pip install seleniumbase
from seleniumbase import Driver
driver = Driver(uc=True, headless=True)
SeleniumBase автоматически обрабатывает многие проблемы совместимости и обеспечивает лучшую обработку ошибок.
Решение 5: Использование undetected-chromedriver
В более сложных случаях undetected-chromedriver может работать лучше:
!pip install undetected_chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome(headless=True, options=chrome_options)
Решение 6: Ручная установка ChromeDriver
Если системный ChromeDriver не работает, попробуйте установить его вручную:
!wget https://chromedriver.storage.googleapis.com/LATEST_RELEASE
!LATEST=$(cat LATEST_RELEASE)
!wget https://chromedriver.storage.googleapis.com/$LATEST/chromedriver_linux64.zip
!unzip chromedriver_linux64.zip
!chmod +x chromedriver
!mv chromedriver /usr/local/bin/
Профилактические меры
Чтобы избежать подобных проблем в будущем:
1. Использование обнаружения среды и резервных вариантов
def create_selenium_driver():
try:
# Сначала пробуем стандартный подход
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
service = Service('/usr/bin/chromedriver')
return webdriver.Chrome(service=service, options=chrome_options)
except Exception as e:
print(f"Стандартный подход не сработал: {e}")
try:
# Пробуем SeleniumBase
from seleniumbase import Driver
return Driver(uc=True, headless=True)
except Exception as e2:
print(f"SeleniumBase не сработал: {e2}")
raise Exception("Все методы инициализации драйвера не сработали")
2. Регулярные обновления
Держите ваши зависимости в актуальном состоянии:
!pip install --upgrade selenium !apt-get update && apt-get upgrade -y
3. Обработка ошибок и логирование
Реализуйте надежную обработку ошибок:
import logging
# Настройка логирования
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
try:
driver = create_selenium_driver()
logger.info("Драйвер успешно инициализирован")
except Exception as e:
logger.error(f"Инициализация драйвера не удалась: {e}")
# Реализуйте резервный вариант или логику повторных попыток
raise
Лучшие практики для будущей совместимости
1. Использование виртуальных сред
!pip install virtualenv
!virtualenv venv
!source venv/bin/activate
Это изолирует ваши зависимости от системных изменений.
2. Кэширование зависимостей
Используйте кэширование Colab, чтобы избежать повторных установок:
# Проверьте, установлены ли зависимости
try:
from selenium import webdriver
except ImportError:
!pip install selenium
3. Мониторинг обновлений Colab
Следите за заметками о выпуске Google Colab на предмет объявленных изменений, которые могут повлиять на ваш код.
4. Регулярное тестирование
Регулярно тестируйте ваши реализации Selenium, чтобы及时发现 проблемы совместимости.
Заключение
Исключение SessionNotCreatedException, с которым вы сталкиваетесь, является распространенной проблемой, вызванной недавними изменениями в среде Google Colab. Ключевые выводы включают:
- Это системная проблема, затрагивающая одновременно нескольких пользователей, а не проблема конфигурации вашего конкретного кода
- Существует несколько решений, включая обновление ChromeDriver, использование объектов Service, переход на SeleniumBase или попытку с undetected-chromedriver
- Реализуйте защитное программирование, создав механизмы резервных вариантов и надежную обработку ошибок
- Держите в курсе обновлений и поддерживайте ваши зависимости в актуальном состоянии
- Регулярно тестируйте, чтобы выявлять проблемы совместимости на раннем этапе
Наиболее надежный подход - реализовать несколько методов инициализации с надлежащей обработкой ошибок, поскольку изменения среды в Colab, вероятно, будут продолжаться. Рассмотрите возможность использования библиотек, таких как SeleniumBase, которые обеспечивают лучшую готовую к использованию совместимость с меняющейся средой Colab.
Источники
- Как исправить исключение SessionNotCreatedException для ChromeDriver в Google Colab? - Stack Overflow
- Selenium с Google Colab - Обсуждение исключения SessionNotCreatedException
- Драйвер не запускается в UC режиме в Google Colab - Обсуждение SeleniumBase
- Проблемы с Selenium на Reddit
- Использование Selenium с Google Colaboratory - Medium
- Заметки о выпуске Google Colab
- Проблемы при попытке использования Chromedriver в Colab - GitHub