Гузариш ба мундариҷа
Мавзӯи 2 аз 6

Ҷустуҷӯи элементҳо

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(...).