Вкладки в браузере



При работе в браузере мы можем открывать новые вкладки и работать в них. Можем открыть любое количество вкладок одновременно, но работать можем только в активной. Мы можем переключаться между вкладками, получать их title, проходить по вкладкам в цикле, получать их дескрипторы — практически все то, что вы делаете вручную.

Вам может понадобиться собрать данные со второй вкладки, не отвлекаясь на первую. Или сайт, который вы парсите, открывает ссылки в новой вкладке. Такое происходит, если у ссылок есть атрибут target=»_blank».

Дескриптор — это идентификатор вкладки браузера. В Opera и Chrome дескрипторы выглядят одинаково, например, CDwindow-8696D8A3F22B281BB03FC1EC259B251, а в Firefox они имеют иной вид, например, d8e0e954-bf72-4eae-a63e-ea404c3b0eb. Дескрипторы — это те сущности, которые помогают нам манипулировать вкладками.

.current_window_handle — возвращает дескриптор текущей вкладки;
.window_handles — возвращает список всех дескрипторов открытых вкладок;
.switch_to.window(window_handles[0]) — переключает фокус между вкладками.

Запустите код ниже, чтобы посмотреть, как он работает. Этот код открывает первую вкладку методом .get(«URL»), затем открывает ещё три вкладки методом .execute_script() и после этого печатает все дескрипторы открытых вкладок.

import time
from selenium import webdriver

with webdriver.Chrome() as browser:
    browser.get('https://mob25.com/')
    time.sleep(1)
    browser.execute_script('window.open("https://mob25.com/category/novosti-cifrovyh-tehnologij/", "_blank1");')
    browser.execute_script('window.open("https://mob25.com/category/knigi/", "_blank2");')
    browser.execute_script('window.open("https://mob25.com/category/stati/", "_blank3");')
    time.sleep(2)
    print(browser.window_handles)

В некоторых гайдах в интернете вы будете встречать информацию о том, что работать можно только в первой открытой вкладке, а остальные открываются лишь для красоты. Но хочу вас обрадовать: это совсем не так. Работать мы можем со всеми вкладками, но только по очереди и только в активной.

Запустите у себя в терминале код ниже, чтобы наблюдать за работой Selenium во всех вкладках по очереди. Обратите внимание на то, что итерация по вкладкам происходит в случайном порядке — это обусловлено асинхронной природой обработки данных современными браузерами. Следует также учесть, что самая первая вкладка имеет имя «data»; в этой вкладке открывается страница, переданная в метод .get(«URL»).

from selenium import webdriver
from selenium.webdriver.common.by import By
with webdriver.Chrome() as browser:
    browser.execute_script('window.open("https://mob25.com/", "_blank1");')
    browser.execute_script('window.open("https://mob25.com/category/novosti-cifrovyh-tehnologij/", "_blank2");')
    browser.execute_script('window.open("https://mob25.com/category/knigi/", "_blank3");')
    browser.execute_script('window.open("https://mob25.com/category/stati/", "_blank4");')
    for page in browser.window_handles:
        browser.switch_to.window(page)
        for y in browser.find_elements(By.CLASS_NAME, 'check'):
            y.click()

Получаем title вкладки

Title — это то, что содержится в HTML-тегах <title>Текст на вкладке</title> и отображается на вкладке браузера.

Чтобы получить имя вкладки, т.е. её title, используется метод .execute_script(«return document.title;»), в который мы передали код JavaScript, возвращающий имя вкладки.

Запустите код ниже у себя в терминале. Этот код откроет страницу и напечатает в консоли title вкладки.

from selenium import webdriver

with webdriver.Chrome() as browser:
    browser.get("https://mob25.com/category/knigi/")
    print(browser.execute_script("return document.title;"))

>>> WEB Парсинг на Python — Stepik



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: