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 для перевикористання взаємодії з елементами сторінок
Tags
web java-script bmp280 adc bldc stm32 rs-232 programmator 3d-printer flash pwm sms motor docker raspberry-pi meteo gps ngnix bme280 timer ssd1331 mpu-6050 bkp battery rfid st-link tim mpx4115a ssd1306 encoder atmega pmsm wifi options rtc examples nvic soldering mongodb esp8266 books lcd foc flask barometer bluetooth ethernet brushless uart watchdog servo gpio solar git remap dma usart eb-500 smd nodemcu sensors displays html python capture dht11 led i2c eeprom piezo exti websocket max1674 usb dc-dc avr hih-4000 css mpu-9250
Архіви