Selenium
Selenium WebDriver — інструмент для автоматизації дій у веббраузері. У більшості випадків використовується для тестування Web-додатків, але цим не обмежується. Зокрема, він може бути використаний для вирішення рутинних завдань адміністрування сайту, автоматизації заповнення форм, або регулярного отримання даних із різних джерел.
Мови програмування: Python, Java, C#, JavaScript, Ruby
Коли нам треба тестувати вебдодаток або сайт, отримати дані з чужого сайту, який не має API, а на них ще працює і якийсь JS фреймворк, тобто, ми маємо справу з динамічним контентом, просто взяти та використати curl не вийде. Тоді нас спасає Selenium.
Цей інструмент розроблено для різних мов програмування, я покажу приклад його роботи на Python.
Офіційні джерела
Встановлення
pip install -U selenium
Подробиці: https://pypi.org/project/selenium/
Приклад
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
# Go to start URL
driver.get("https://prom.ua/")
# Print title
title = driver.title
print (title)
# Fill Search element
search_element = driver.find_element(By.NAME, "search_term")
search_element.send_keys('батарейка')
# Press Search button
search_button = driver.find_element("xpath", '//button[@data-qaid="search_btn"]')
search_button.click()
# Wait some seconds
driver.implicitly_wait(3.0)
# Get product links
product_links = driver.find_elements("xpath", '//a[@data-qaid="product_link"]')
for product_link in product_links:
product_title = product_link.get_attribute('title')
# Looking for the first product whose name contains the line "R6"
if product_title.find("R6") > -1:
product_href = product_link.get_attribute('href')
print (product_title)
print (product_href)
# Open page to full prewiev
driver.get(product_href)
driver.implicitly_wait(0.5)
# Press "By button"
buy_button = driver.find_element("xpath", '//button[@data-qaid="buy-button"]')
buy_button.click()
driver.implicitly_wait(4.0)
time.sleep(3)
# Open Shopping cart
shopping_cart = driver.find_element("xpath", '//button[@data-qaid="shopping_cart"]')
shopping_cart.click()
time.sleep(3)
# Press button to create order
create_order_btn = driver.find_element("xpath", '//button[@data-testid="create_order_btn"]')
create_order_btn.click()
time.sleep(1)
# Fill a form
phoneInputLabel = driver.find_element(By.ID, "phoneInputLabel")
phoneInputLabel.send_keys(Keys.NULL) # Set focus
phoneInputLabel.send_keys(Keys.HOME) # Press key Home
time.sleep(0.5)
phoneInputLabel.send_keys('671111111')
last_name_block = driver.find_element(By.ID, "last_name_block")
last_name_block.send_keys('Тестувальненков')
first_name_block = driver.find_element(By.ID, "first_name_block")
first_name_block.send_keys('Тест')
# Press button to continue
save_btn = driver.find_element("xpath", '//button[@data-testid="save_btn"]')
save_btn.click()
break
time.sleep(10)
exit()
Цей скрипт на сайті prom.ua знаходить по слову "батарейка" перший товар у назві якого зустрічається "R6" (це такий тип батарейки), додає у кошик і заповнює форму замовлення з телефоном і ім'ям. На цьому робота припиняється, щоб не створювати фейкових замовлень. Цей приклад показує лише деякі механізми, які дозволяють нам імітувати дії користувача у браузері, отримувати дані з сайту та аналізувати їх. З часом дизайн сайту взятого для прикладу може змінитися і скрипт перестане коректно працювати.
Бажаю успіхів.
Типова і класична помилка початківця з Селеніумом це ось ті сліпи після кожної дії в очікуванні, що через заданий проміжок часу щось гарантовано має статись. Насправді ж на практиці дуже часто щось іде не так і часто доводиться постійно збільшувати сліпи. Рішення: це той самий implicitly_wait Більше інформації: https://www.selenium.dev/documentation/webdriver/waits/
Дякую! Я очікував подібний коментар. Приємно, що мене читають тямущі люди. Як ви бачите, я використовую implicitly_wait. Звичайні time.sleep вставив, щоб встигати візуально спостерігати що відбувається.
Ааа, тепер зрозуміло. А то було дивно що і implicitly_wait і просто сліпи теж присутні
Selenium зручний, але досить застарілий. Зараз для автоматизованого тестування популярніший і зручніший playwright. І якщо необхідно зробити якийсь проект, то зручно застосовувати page object model для перевикористання взаємодії з елементами сторінок
Недавні записи
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
- U-FOC - Векторне керування безколекторними моторами
- FOC - своя реалізація векторного керування. Підбиваю підсумки 2022 року
Tags
raspberry-pi st-link bldc timer max1674 bluetooth eb-500 python ngnix rtc atmega servo avr pwm web tim uart remap brushless bme280 smd esp8266 eeprom bkp capture dht11 ethernet sensors websocket mongodb 3d-printer piezo rs-232 led css meteo i2c options exti html battery soldering bmp280 wifi mpu-9250 examples dma adc gpio sms motor solar hih-4000 lcd docker ssd1306 encoder dc-dc displays pmsm barometer watchdog java-script flask git gps mpu-6050 flash nvic books foc nodemcu programmator usb usart rfid mpx4115a stm32 ssd1331
Архіви