Парсер на «Selenium»: урок 5, переключение по вкладкам
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Уроки «Selenium»
Комментариев: 0

В этом уроке по 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
>>> Пользователь
Теги записи: Python, Selenium, Парсер,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)