Привіт, Гість

dsoft blog

приклад парсингу статусу доставки з сайту Mail Box etc за домогою Selenium

Published by ds

Парсинг даних з веб-сайтів є важливим етапом для багатьох бізнес-процесів. Однак, щоб забезпечити ефективність цього процесу, потрібно правильно обрати інструмент для парсингу. Один з таких інструментів - Selenium, який дозволяє автоматизувати взаємодію з веб-сайтами та отримувати потрібні дані.

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

  1. Налаштування середовища VENV VENV (Virtual Environment) - це ізольоване середовище, яке дозволяє ізолювати залежності проекту та запускати його відокремлено від інших проектів. Це допомагає уникнути конфліктів між залежностями та дозволяє легко переносити проект між різними машинами.

Щоб налаштувати середовище VENV, потрібно встановити його за допомогою команди:

pip install virtualenv

 

Після цього можна створити нове середовище за допомогою команди:

virtualenv myenv

Ця команда створить нове середовище з іменем "myenv". Для активації середовища потрібно виконати команду:

source venv/bin/activate (для MacOS/Linux) або venv\Scripts\activate (для Windows).

Після налаштування середовища VENV, можна встановити Selenium за допомогою команди:

pip install selenium

Наведений вище код виконує парсинг статусу відправки товарів по номеру накладної з веб-сайту https://www.mbetreviso.it/tracking.jsf. Для початку створюється об'єкт браузера Chrome за допомогою WebDriver. Для того, щоб запустити браузер в фоні .

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.options import Options

 

def get_status(ttn):

chrome_options = Options()

chrome_options.add_argument('--headless')

 

browser = webdriver.Chrome(options=chrome_options)

 

browser.get(f'https://www.mbetreviso.it/tracking.jsf?cmd=BYORDERID_SINGLE&idordini={ttn}')


 

steps = browser.find_elements(By.CLASS_NAME, 'step')

status_list = []

for step in steps:

if 'completed' in step.get_attribute('class'):

status_list.append({step.find_element(By.CLASS_NAME, 'step-text').text: 1})

else:

status_list.append({step.find_element(By.CLASS_NAME, 'step-text').text: 0})

 

if len(status_list) == 0:

error_elem = browser.find_element(By.CLASS_NAME, 'ui-messages-error-summary')

status_list.append({'error':error_elem.text.strip()})

browser.quit()

print(status_list)

return status_list

 

get_status(ttn number)

В нашому випадку, ми використовуємо Chrome, тому ми повинні встановити ChromeDriver. ChromeDriver - це окремий процес, який зв'язується з веб-браузером Google Chrome та дозволяє Selenium управляти браузером.

Якщо ви використовуєте інший браузер, вам потрібно буде встановити відповідний драйвер. Наприклад, для Firefox - це GeckoDriver.

Тепер давайте розберемося з кодом. Основна функція використовує бібліотеку Selenium, щоб отримати статус поштової посилки. Функція отримує номер поштової посилки як аргумент та повертає список статусів, якщо поштова посилка була успішно доставлена, або повідомлення про помилку та статус 0, якщо поштова посилка не може бути доставлена.

На сайті ми бачимо три кроки доставки і ми будемо парсити кожен крок та якщо він завершений записувати 1 якщо ні то 0.

натиснувши на фото можете перейти на сайт з доставкою

 

Сайт статусудоставки Mail Box ETC

Перший рядок коду from selenium.common.exceptions import NoSuchElementException імпортує виняток NoSuchElementException з бібліотеки Selenium. Цей виняток виникає, коли елемент не може бути знайдений на сторінці.

Далі ми створюємо об'єкт chrome_options та додаємо параметр '--headless', який дозволяє виконувати браузер у безголовому режимі. Безголовий режим дозволяє виконувати браузер без відображення графічного інтерфейсу, що зменшує використання ресурсів та покращує продуктивність.

Потім ми створюємо об'єкт browser за допомогою класу webdriver.Chrome та передаємо параметр options=chrome_options.

Щоб перевірити, чи успішно встановлено Selenium, можна відкрити командний рядок та виконати команду "python -c 'import selenium; print(selenium.version)'". Якщо версія Selenium відображається, це означає, що встановлення пройшло успішно.

Після встановлення Selenium та налаштування віртуального середовища Python можна перейти до розробки веб-скраперів з використанням Selenium. Надалі наведений код демонструє функцію "get_status", яка використовує Selenium для отримання статусу доставки з сайту mbetreviso.it.

Код функції розпочинається з імпорту виняткових ситуацій з модулю "selenium.common.exceptions", необхідного для обробки помилок під час парсингу веб-сторінок з використанням Selenium.

Функція "get_status" приймає один аргумент "ttn", який є ідентифікатором відправлення для відстеження статусу доставки.

Далі функція створює об'єкт опцій для Chrome, використовуючи "Options()" з модуля "selenium.webdriver". За допомогою методу "add_argument" до опцій додається параметр "--headless", що означає, що відображення вікна браузера буде вимкнено під час виконання скрипту.

Далі створюється екземпляр браузера Chrome, використовуючи "webdriver.Chrome" з модуля "selenium.webdriver". До браузера передається об'єкт опцій "chrome_options".

За допомогою методу "get" браузер відкриває вказану веб-сторінку з ідентифікатором відправлення для відстеження статусу доставки.

Після цього функція спробує знайти елемент з повідомленням про помилку, використовуючи метод "find_element" з модуля "selenium.webdriver". Якщо елемент знайдено, текст повідомлення зберігається у змінну "error_message", а функція повертається з помилкою та статусом

Якщо ж елемент з повідомленням про помилку не знайдено, програма продовжує виконання.

Далі функція шукає всі елементи з класом "step" і перевіряє, чи є серед них елемент з класом "step completed". Якщо такий елемент знайдено, функція отримує текст статусу, використовуючи метод "find_element" з модуля "selenium.webdriver". Цей текст додається до списку "statuses". Якщо елемент з класом "step completed" не знайдено, функція повертає текст помилки "No completed statuses found" та статус "0".

Останнім кроком функція закриває вікно браузера та повертає список статусів разом із статусом "1". Значення статусу "1" означає, що функція успішно виконалась без помилок.

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

Ще немає коментарів.

Авторизуйтесь, щоб залишити коментар.

Про нас

Деякі корисні статті присвячені розробці веб-додатків та технологіям, які допоможуть вам створити продуктивні та захищені веб-додатки.

Ми в соцемережах

  1. GitHub
  2. Twitter