Поиск элементов
Selenium управляет настоящим браузером из кода: открывает страницы, нажимает кнопки, заполняет формы и читает результат. Так автоматизируют рутину и тестируют сайты. В отличие от requests и BeautifulSoup, Selenium видит страницу так же, как человек, — вместе со всем, что нарисовал JavaScript.
В курсе вы соберёте автозаполнение формы: найти поля, ввести данные, дождаться ответа сайта и проверить результат.
Подготовка
Нужен установленный Google Chrome. Драйвер для управления им Selenium скачает сам при первом запуске (это может занять минуту).
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # откроется окно Chrome
try:
driver.get("https://example.com")
print(driver.title)
print(driver.find_element(By.TAG_NAME, "h1").text)
finally:
driver.quit() # закрыть браузер в любом случае
Без окна (быстрее, удобно на сервере): options = webdriver.ChromeOptions(); options.add_argument("--headless=new"); webdriver.Chrome(options=options).
Поиск элементов
driver.find_element(By.ID, "login") # первый элемент или исключение NoSuchElementException
driver.find_elements(By.CSS_SELECTOR, "article h2") # список, может быть пустым
driver.find_element(By.NAME, "email")
driver.find_element(By.XPATH, "//button[text()='Войти']")
Способы поиска (By): ID, NAME, CLASS_NAME, TAG_NAME, CSS_SELECTOR, XPATH, LINK_TEXT. Чаще всего хватает CSS-селекторов — тех же, что в CSS и BeautifulSoup:
| Селектор | Что найдёт |
|---|---|
#main |
элемент с id="main" |
.title |
элементы с классом title |
article h2 |
h2 где-то внутри article |
nav > a |
a прямо внутри nav |
input[name=email] |
input с атрибутом name="email" |
Искать можно и внутри найденного элемента: row.find_elements(By.TAG_NAME, "td").
Что можно узнать об элементе
.text— видимый текст;.get_attribute("href")— значение атрибута (у ссылок — полный адрес);.is_displayed(),.is_enabled(),.is_selected()— виден ли, активен ли, отмечен ли;.tag_name.
Как проверяются задачи
Проверка запускает Chrome без окна и открывает маленькую страницу прямо из программы (адрес data:text/html,… — без интернета). «Запустить у себя» открывает видимое окно браузера, чтобы вы видели, как программа работает.
Итог
webdriver.Chrome(),get,quitвfinally;find_element(один, или исключение) иfind_elements(список);By.CSS_SELECTORи другие способы поиска; поиск внутри элемента;.text,.get_attribute(...).