Ҷустуҷӯи элементҳо
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(...).