1. Підготовка до навігації
Перш ніж розпочати наші великі подорожі, нам потрібно зібратися, озброївшись правильними інструментами: Selenium і трішки хитрощів. Ми припускаємо, що ти вже знаєш, як налаштувати Selenium і драйвер для браузера, тож рушаймо!
Налаштування драйвера
from selenium import webdriver
# Запуск драйвера браузера, наприклад, Chrome
driver = webdriver.Chrome()
# Відкриваємо першу сторінку нашої пригоди
driver.get("http://example.com/start-page")
Поки що все стандартно — ми відкрили браузер і завантажили стартову сторінку. Але ось де починається веселощі: ми не хочемо просто зависнути на одній сторінці. Ми хочемо побувати на кожній її сусідці!
2. Пагінація: прогулянка по сторінках
Найпростішим і дружнім способом навігації по сторінках є пагінація. Ви всі бачили ці милі маленькі цифри внизу сторінки, чи не так? Вони як вказівники на дорозі: «Ваша наступна зупинка — сторінка 2».
Витяг даних зі сторінок
Перш ніж ми почнемо подорожувати, ми хочемо зібрати інформацію з поточної сторінки. Припустімо, це списки товарів або заголовки статей.
def extract_data():
# Знаходимо всі елементи, які нас цікавлять на сторінці, наприклад, заголовки
titles = driver.find_elements_by_class_name("item-title")
for title in titles:
print(title.text) # Так, ми просто виводимо текст, але ти можеш зберігати його де завгодно
extract_data()
Якщо ти пропустив(-ла) попередні лекції, то цей шматочок коду шукає всі заголовки з класом item-title і виводить їх.
Навігація до наступної сторінки
Тепер, коли ми вже маємо дані, час вирушити далі. Пагінація часто представлена у вигляді кнопок зі посиланнями на наступну чи попередню сторінку. Ми маємо знайти ці кнопки і натиснути на них.
def go_to_next_page():
try:
# Знаходимо кнопку наступної сторінки та клікаємо по ній
next_button = driver.find_element_by_link_text("Next")
next_button.click()
except NoSuchElementException:
# Якщо кнопки немає, значить, ми досягли кінця
print("Кінець списку сторінок.")
Ця функція шукає посилання з текстом «Next». Якщо вона знайдена, вона клікає по ній, переходячи на наступну сторінку. Якщо ж ні, наш бот розуміє, що досяг кінця інтернету... ну, принаймні, цієї послідовності сторінок.
3. Циклічний обхід сторінок
Чого нам не вистачає для повного щастя? Правильно, циклу! Об'єднаємо все це в один зручний цикл, щоб наш бот міг пройти всі доступні сторінки, мов справжній професіонал.
while True:
extract_data() # Збираємо дані з поточної сторінки
go_to_next_page() # Переходимо до наступної
time.sleep(2) # Трохи відпочиваємо, щоб не налякати сервер
Ну ось, тепер наш бот сміливо обходить всі сторінки, на яких можна натиснути кнопку «Next». Цей код буде виконуватися доти, доки не закінчаться сторінки. Пам'ятайте, що невелика пауза між запитами — це ваша дружба з сервером. Ніхто не любить спамерів, особливо адміні сайтів.
4. Динамічна взаємодія
Друзі, не все так просто в житті, як у цих прикладах із пагінацією. Іноді сторінка поводиться, мов невловимий ніндзя, підвантажуючи дані динамічно під час прокрутки. Не біда, і з таким ми теж впораємось.
Явне очікування
Очікування дозволяють коду трохи помедитувати доти, доки потрібний елемент не стане доступним. Це особливо корисно, коли контент завантажується не одразу.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def wait_for_element(locator):
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, locator))
)
return element
except TimeoutException:
print("Елемент не знайдено.")
За допомогою цієї функції ваш бот буде в злагоді з динамічно підвантажуваним контентом, очікуючи, доки елементи стануть доступними.
Прокрутка сторінки
З динамічним контентом, що міститься в таких чарівних сторінках, як безкінечна прокрутка, може знадобитися прокручувати сторінку вниз, щоб більше елементів завантажилося.
def scroll_down():
# Використовуємо JavaScript для прокрутки вниз
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
Скрипт на JavaScript допомагає зробити плавну прокрутку вниз, даючи можливість сторінці підвантажувати контент. Цим прийомом можна скористатися в циклі, щоб обійти безкінечну прокрутку.
5. Особливості та лайфхаки
Вихід за межі прикладів — це томик пригод, повний сюрпризів. Уявіть, що ваш бот, як і ви, має бути готовий до різних сценаріїв.
Якщо кнопки «Next» немає, але є пагінація з номерами сторінок, використовуйте динамічний підхід, підставляючи номер в URL безпосередньо. А якщо ваш сайт раптом вирішив стати ніндзя і приховати деякі сторінки, налаштуйте свої скрипти так, щоб вони могли адаптуватися, залишаючись готовими до несподіванок.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ