В этом уроке по Selenium в Python мы рассмотрим переключение вкладок браузера. За примером воспользуемся сайтом avito.
Иногда при парсинге нам могут попасться сайты, которые будут отправлять нас при клике на новую вкладку. Функционал Selenium это предусмотрел, и в нем есть замечательный метод:
driver.switch_to.window(driver.window_handles[index])
Аргументы:
- Передаем во внутрь метода сам драйвер с
window_handles
, в квадратных скобочках передаем целочисленное число вкладки. Допустим 0 это будет первая вкладка, 1 это вторая вкладка и т.д.
Давайте найдем все элементы на странице с помощью CSS селектора - item-photo
:

Чтобы посмотреть результат, напишем код:
import time
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument("--window-size=1920x1080")
service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)
url = 'https://www.avito.ru/krasnodar/tovary_dlya_kompyutera/komplektuyuschie/videokarty'
try:
driver.get(url=url)
time.sleep(5)
# Ищем элементы на странице
card_items = driver.find_elements(By.CSS_SELECTOR, '[data-marker="item-photo"]')
# Переходим к элементу с индексом 0
card_items[0].click()
time.sleep(5)
except Exception as ex:
print(ex)
finally:
driver.close()
driver.quit()
Пояснение:
- Мы объявили переменную
card_items
, куда поместили с помощью методаfind_elements
все элементы с селекторомdata-marker="item-photo"
- Взяли первый элемент с индексом 0 и кликнули по нему. В программировании все считается с 0.
При клике на объект у нас открывается вкладка самого поста:

Чтобы спарсить информацию с этой вкладки, нам нужно сделать переключение в самом Selenium, для этого дополним наш код и спарсим имя пользователя, а также выведем текущую ссылку для того, чтобы убедиться, на нужной ли мы вкладке:
import time
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument("--window-size=1920x1080")
service = Service('C:\\Users\\Razilator\\Desktop\\Projects\\Courses\\Selenium\\driver\\chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)
url = 'https://www.avito.ru/krasnodar/tovary_dlya_kompyutera/komplektuyuschie/videokarty'
try:
driver.get(url=url)
time.sleep(5)
# Ищем элементы на странице
card_items = driver.find_elements(By.CSS_SELECTOR, '[data-marker="item-photo"]')
# Переходим к элементу с индексом 0
card_items[0].click()
time.sleep(5)
# Переключение на вкладку с индексом 1
driver.switch_to.window(driver.window_handles[1])
time.sleep(5)
print(driver.current_url)
# Спарсим имя пользователя
username = driver.find_element(By.CSS_SELECTOR, '[data-marker="seller-info/name"]').text
print(username)
except Exception as ex:
print(ex)
finally:
driver.close()
driver.quit()
Пояснение:
- С помощью метода
switch_to.window
переключаемся во вкладку сwindow_handles
с индексом 1. - Выводим текущую ссылку с помощью метода
current_url
, чтобы убедиться, что находимся мы во второй вкладке. - В переменную
username
парсим имя пользователя. - Выводим результаты.
Результат:
>>> https://www.avito.ru/krasnodar/tovary_dlya_kompyutera/rtx_3070_gaming_z_trio_15sht_novye_2539387599
>>> Пользователь