Рӯйхатҳо ва саҳифаҳо
Маълумот кам дар як саҳифа ҷо мешавад: феҳристҳо ба саҳифаҳо тақсим шудаанд, тасмаҳо бо тугмаи «Боз нишон деҳ» бор мешаванд. Барнома бояд аз ҳамаи онҳо гузарад.
Саҳифа ба саҳифа
names = []
while True:
names += [li.text for li in driver.find_elements(By.CSS_SELECTOR, "#list li")]
button = driver.find_element(By.ID, "next")
if not button.is_enabled(): # саҳифаи охирин
break
button.click()
Тартиб муҳим аст: аввал саҳифаи ҷориро хондан, баъд ҳал кардан, ки ба пеш равем ё не. Вагарна саҳифаи охирин гум мешавад.
Аломати анҷом гуногун мешавад: тугма ғайрифаъол аст (is_enabled()), тугма нест (find_elements рӯйхати холӣ баргардонд), суроға иваз нашуд, рӯйхати холӣ омад.
Боргирии иловагӣ
Агар баъди пахш маълумот фавран наояд, иваз шуданро интизор шудан лозим. Шарти интизорӣ метавонад ҳар функсия аз driver бошад:
before = len(driver.find_elements(By.CSS_SELECTOR, "div.comment"))
driver.find_element(By.ID, "more").click()
WebDriverWait(driver, 5).until(lambda d: len(d.find_elements(By.CSS_SELECTOR, "div.comment")) > before)
Функсия ҳар ним сония даъват мешавад, то қимати ҳақиқӣ баргардонад.
Элементҳои «кӯҳнашуда»
Вақте саҳифа мундариҷаро иваз мекунад (саҳифаи нави феҳрист), элементҳои кӯҳнаи ёфтшуда вуҷуд надоранд. Муроҷиат ба онҳо — StaleElementReferenceException. Бинобар ин элементҳоро баъди ҳар амал аз нав меҷӯянд, иваз шуданро бошад бо шарти EC.staleness_of(элементи_кӯҳна) интизор шудан мумкин.
JavaScript аз Python
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") # ба поён гардондан
title = driver.execute_script("return document.title")
driver.execute_script("arguments[0].click()", element) # пахш тавассути JS
Ин абзори эҳтиётӣ аст: вақте амалҳои оддӣ кифоя намекунанд (гардониши беохир, элементҳои пӯшида).
Ададҳо аз саҳифа
Дар саҳифаҳо ададҳо «барои одамон» навишта шудаанд: 1 299 ₽, 12,5 %. Пеш аз ҳисобҳо онҳоро тоза мекунанд: рақамҳоро мегузоранд (ch.isdigit()), вергулро ба нуқта иваз мекунанд.
Хулоса
- саҳифаро хондан → анҷомро санҷидан → ба пеш гузаштан;
- шартҳои интизории худ:
until(lambda d: …); - баъди навшавии саҳифа элементҳоро аз нав меҷӯянд;
execute_scriptбарои гардондан ва ҳолатҳои махсус; ададҳоро пеш аз ҳисоб тоза мекунанд.