⚖️ Старый vs Новый: Selenium 3 → Selenium 4

← К оглавлению урока

Этот раздел показывает устаревший код из лекции и его современный эквивалент. В новых проектах используйте только «Современный (Selenium 4)» колонку.

⚡ Главные изменения: Selenium 3 → Selenium 4

  • executable_path= удалён → используйте Service()
  • find_element_by_id() и т.п. → find_element(By.ID, ...)
  • Ручной chromedriverSelenium Manager (авто)
  • implicitly_wait — ещё работает, но WebDriverWait надёжнее

1. Инициализация драйвера

Из лекции (устарело — Selenium 3)

# ❌ executable_path удалён в Selenium 4
from selenium import webdriver

driver = webdriver.Chrome(
    executable_path="path/to/chromedriver"
)

Selenium 3: нужно было вручную скачивать chromedriver, следить за версией Chrome.

Современное (Selenium 4)

# ✅ Selenium Manager — авто (Selenium 4.6+)
from selenium import webdriver

driver = webdriver.Chrome()
# Selenium Manager сам найдёт chromedriver

Selenium 4: Selenium Manager автоматически скачивает совместимый ChromeDriver.

2. Инициализация через Service (если нужен контроль над путём)

Из лекции (устарело)

# ❌ executable_path= — deprecated
from selenium import webdriver

driver = webdriver.Chrome(
    executable_path="/path/to/chromedriver"
)

Современное (Selenium 4)

# ✅ Service + path
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service("C:/WebDrivers/chromedriver.exe")
driver = webdriver.Chrome(service=service)

3. webdriver-manager (явный менеджер загрузки)

В лекции использован webdriver-manager — сторонняя библиотека. Она по-прежнему работает и даёт явный контроль над версией драйвера.

Из лекции (старый синтаксис)

# ❌ executable_path с webdriver-manager
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(
    executable_path=ChromeDriverManager().install()
)

Современное (правильный синтаксис)

# ✅ Service + ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(
    service=ChromeService(ChromeDriverManager().install())
)

4. Поиск элементов

Из лекции (устарело — Selenium 3)

# ❌ Методы find_element_by_* удалены
element = driver.find_element_by_id("myId")
element = driver.find_element_by_name("email")
element = driver.find_element_by_class_name("btn")
element = driver.find_element_by_tag_name("h1")
element = driver.find_element_by_link_text("О нас")
element = driver.find_element_by_css_selector(".nav a")
element = driver.find_element_by_xpath("//button")

Современное (Selenium 4)

# ✅ find_element(By.*, value)
from selenium.webdriver.common.by import By

element = driver.find_element(By.ID, "myId")
element = driver.find_element(By.NAME, "email")
element = driver.find_element(By.CLASS_NAME, "btn")
element = driver.find_element(By.TAG_NAME, "h1")
element = driver.find_element(By.LINK_TEXT, "О нас")
element = driver.find_element(By.CSS_SELECTOR, ".nav a")
element = driver.find_element(By.XPATH, "//button")

5. Ожидания

Из лекции (ненадёжно)

# ❌ sleep — не адаптируется к скорости сети
from time import sleep
sleep(50)  # просто ждёт 50 секунд

# ❌ implicitly_wait — глобально, маскирует проблемы
driver.implicitly_wait(10)

Современное (рекомендуется)

# ✅ WebDriverWait — ждёт конкретного условия
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(
    EC.element_to_be_clickable((By.LINK_TEXT, "О нас"))
)

6. Фикстура Firefox в лекции — исправление синтаксиса

В лекции (конспект) есть код фикстуры для Firefox с устаревшим executable_path:

Из лекции (устарело)

# ❌ executable_path — deprecated
driver = webdriver.Firefox(
    executable_path=GeckoDriverManager().install(),
    options=options
)

Современное (Selenium 4)

# ✅ Service + GeckoDriverManager
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(
    service=FirefoxService(GeckoDriverManager().install())
)

Сводная таблица изменений

Что изменилось Selenium 3 (устарело) Selenium 4 (актуально)
Инициализация драйвера executable_path= Service() или Selenium Manager
Поиск элементов find_element_by_id() и т.п. find_element(By.ID, ...)
Менеджер драйверов Ручная загрузка или webdriver-manager Selenium Manager (встроен)
Ожидания sleep(), implicitly_wait() WebDriverWait + expected_conditions
Закрытие браузера driver.close() driver.quit() (закрывает всё)