JavaRush /Курси /Python SELF UA /Автоматизація прокрутки сторінки та перехід за посиланням...

Автоматизація прокрутки сторінки та перехід за посиланнями

Python SELF UA
Рівень 36 , Лекція 1
Відкрита

1. Автоматична прокрутка сторінки

Уяви, що сидиш у такій жахливій, але вже звичній для багатьох стрічці в соцмережах, де контент ліниво підвантажується під час прокрутки. Ця чарівна прокрутка має свій API для автоматизації з Selenium.

Метод execute_script()

Метод execute_script() у Selenium дозволяє виконувати JavaScript-код на сторінці, і це потужний інструмент, коли йдеться про прокрутку. Давай розглянемо, як його використовувати для прокрутки сторінки.

Python

from selenium import webdriver
import time

# Ініціалізація драйвера браузера
driver = webdriver.Chrome()

# Відкриваємо цільову сторінку
driver.get('https://example.com/scrolling_page')

# Прокручуємо сторінку вниз
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)  # Чекаємо, щоб контент встиг підвантажитися

# Прокручуємо сторінку вгору (для різноманітності)
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0);")

# Завершуємо сесію
driver.quit()

У цьому скрипті ми використовуємо window.scrollTo(), щоб прокручувати сторінку. Аргументи (0, document.body.scrollHeight) вказують на прокрутку від початку до кінця сторінки. Це проста і ефективна техніка для забезпечення повного завантаження всіх динамічних елементів.

Чому це важливо?

Використання execute_script() для прокрутки сторінки дозволяє завантажувати контент, який може бути прихований спочатку, наприклад, при нескінченній прокрутці. Це особливо корисно для соцмереж і новинних стрічок, де контент підвантажується динамічно.

2. Перехід за посиланнями

Тепер, коли ми опанували прокрутку, час перейти до наступного завдання — автоматичного переходу за посиланнями. Це ключова навичка для збору даних, особливо якщо інформація розкидана між різними сторінками.

Основи навігації за посиланнями

Щоб клікнути по посиланню, ми можемо використовувати метод click() на вибраному елементі. Давай розберемо простий приклад:

Python

from selenium import webdriver

# Ініціалізація драйвера браузера
driver = webdriver.Chrome()

# Відкриваємо цільову сторінку
driver.get('https://example.com/links_page')

# Знаходимо посилання за текстом і клікаємо
link = driver.find_element_by_link_text('Next Page')
link.click()

# Завершуємо сесію
driver.quit()

У цьому прикладі ми шукаємо посилання за його текстовим вмістом. Але що, якщо текст не унікальний? У такому випадку можна використовувати більш точні методи, такі як find_element_by_xpath() або find_element_by_css_selector().

Python

# Пошук посилання за XPath
link = driver.find_element_by_xpath('//a[@href="/next_page"]')
link.click()

Переваги автоматичного переходу за посиланнями

Навігація за посиланнями з Selenium дозволяє автоматизувати процес збору даних зі сторінок, які мають пагінацію, або коли дані розподілені по кільком підрозділам сайту. Це відмінно підходить для обходу результатів пошуку або перегляду каталогу товарів на сайтах інтернет-магазинів.

3. Поєднання прокрутки і переходів

Тепер уяви, що тобі потрібно прокрутити сторінку, щоб знайти потрібне посилання чи елемент, а потім перейти на іншу сторінку. Це комбінований процес, який можна автоматизувати.

Приклад комбінованого скрипта

Python

from selenium import webdriver
import time

# Ініціалізація драйвера браузера
driver = webdriver.Chrome()

# Відкриваємо цільову сторінку
driver.get('https://example.com/scroll_and_click')

# Прокручуємо сторінку, щоб завантажити приховані елементи
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)

# Знаходимо та клікаємо по потрібному посиланню
link = driver.find_element_by_xpath('//a[text()="Load More"]')
link.click()

# Завершуємо сесію
driver.quit()

Що може піти не так?

Під час роботи з динамічними сторінками іноді елементи можуть не встигати завантажуватись або підвантажуватись не повністю. У таких випадках доводиться використовувати методи очікування, щоб переконатись, що елементи, з якими ти хочеш взаємодіяти, вже доступні.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Очікування поки елемент не стане клікабельним
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//a[text()="Load More"]'))
)
element.click()

Використання методів очікування допомагає уникнути збоїв через неготові елементи та забезпечує більш стабільну роботу скрипта.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ