Python

Как открыть элемент в новой вкладке Python: Selenium и рабочий пример

Когда в запросе звучит «открыть элемент в новой вкладке», чаще всего речь не про обычный запуск браузера, а про автоматизацию страницы: скрипт нашел ссылку, карточку товара, кнопку или результат поиска, и теперь нужно открыть это место отдельно, не теряя текущую страницу

В Python для такой задачи обычно используют Selenium. Важно понимать нюанс: открыть «элемент» напрямую нельзя. Можно открыть адрес, который стоит за элементом, либо кликнуть по элементу так, как это сделал бы пользователь, а затем переключиться на новую вкладку

Короткий ответ

Если элемент является ссылкой <a href="...">, самый надежный способ такой: найти элемент, получить у него href, открыть новую вкладку и перейти по этому адресу

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://example.com")

link = driver.find_element(By.CSS_SELECTOR, "a")
url = link.get_attribute("href")

driver.switch_to.new_window("tab")
driver.get(url)

print(driver.title)

Этот код не пытается нажимать на ссылку через клавиатурные сочетания. Он берет реальный адрес и открывает его в новой вкладке браузера, поэтому работает стабильнее в учебных и рабочих скриптах

Почему не всегда стоит делать Ctrl + Click

В браузере человек может зажать Ctrl или Command и кликнуть по ссылке. Selenium тоже умеет отправлять клавиши, но такой подход зависит от операционной системы, фокуса страницы и поведения конкретного браузера. На Windows и Linux обычно используют Ctrl, на macOS Command, а некоторые элементы перехватывают клик JavaScript-кодом

Поэтому для начинающего лучше не начинать с имитации клавиатуры. Если у элемента есть href, берите ссылку как данные и открывайте ее через новую вкладку Selenium

Как открыть именно найденную ссылку

Допустим, на странице есть несколько ссылок, а нужна только ссылка с текстом «Подробнее»

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

details_link = driver.find_element(By.LINK_TEXT, "Подробнее")
details_url = details_link.get_attribute("href")

driver.switch_to.new_window("tab")
driver.get(details_url)

print("Открыта новая вкладка:", driver.current_url)

Здесь By.LINK_TEXT ищет ссылку по видимому тексту. Если текст на странице меняется, лучше использовать CSS-селектор: класс, атрибут, часть адреса или другой устойчивый признак

Как переключаться между старой и новой вкладкой

Когда Selenium открывает новую вкладку, у браузера появляется несколько window_handles. Это служебные идентификаторы вкладок и окон. Их нужно сохранить, если вы планируете вернуться назад

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

first_tab = driver.current_window_handle

link = driver.find_element(By.CSS_SELECTOR, "a")
url = link.get_attribute("href")

driver.switch_to.new_window("tab")
driver.get(url)

second_tab = driver.current_window_handle

print("Новая вкладка:", driver.title)

driver.switch_to.window(first_tab)
print("Старая вкладка:", driver.title)

driver.switch_to.window(second_tab)
print("Снова новая вкладка:", driver.current_url)

Такой код полезен, когда первая страница является списком, а новая вкладка нужна для подробной карточки. Скрипт может открыть карточку, собрать данные, закрыть вкладку и вернуться к списку

Если элемент не ссылка, а кнопка

Кнопка может не иметь href. Например, она отправляет форму, открывает модальное окно или запускает JavaScript. В таком случае получить адрес через get_attribute("href") не получится

Сначала проверьте, что находится в элементе

button = driver.find_element(By.CSS_SELECTOR, ".product-button")

print(button.tag_name)
print(button.get_attribute("href"))
print(button.get_attribute("onclick"))

Если href пустой, нужно смотреть, что делает кнопка. Иногда адрес лежит в data-url, иногда переход происходит после клика, иногда новая вкладка создается JavaScript-кодом сайта

Клик и ожидание новой вкладки

Если сайт сам открывает новую вкладку после клика, можно запомнить старые вкладки, нажать на элемент и дождаться появления новой

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
driver.get("https://example.com")

old_tabs = driver.window_handles

button = driver.find_element(By.CSS_SELECTOR, ".open-in-new-tab")
button.click()

WebDriverWait(driver, 10).until(
    lambda browser: len(browser.window_handles) > len(old_tabs)
)

new_tab = [tab for tab in driver.window_handles if tab not in old_tabs][0]
driver.switch_to.window(new_tab)

print(driver.current_url)

Этот вариант нужен, когда новая вкладка появляется именно из поведения сайта. Если вы сами можете получить href, первый способ обычно проще

Мини-практика

Создайте небольшой скрипт, который открывает страницу, находит первую ссылку и выводит ее адрес. После этого добавьте открытие этой ссылки в новой вкладке

Проверьте себя так: в консоли должна появиться ссылка, затем браузер должен перейти на эту ссылку во второй вкладке. Если вкладка не открылась, вы либо нашли не ссылку, либо у элемента нет атрибута href

Частые ошибки

Ошибка первая: пытаться открыть сам Selenium-элемент через driver.get(element). Метод get() принимает строку с адресом, а не объект элемента

Ошибка вторая: искать элемент слишком общим селектором. a откроет первую ссылку на странице, и это может быть логотип, пункт меню или ссылка на политику конфиденциальности

Ошибка третья: забыть переключиться на новую вкладку. В Selenium вкладка может открыться, но команды продолжат выполняться в старом окне, если явно не сделать driver.switch_to.window(...)

Ошибка четвертая: пытаться работать с вкладкой сразу после клика без ожидания. Браузеру нужно время, поэтому для кликов лучше использовать WebDriverWait

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x