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