Selenium

Taray覺c覺lar 羹zerinde otomatize iler yapmak i癟in kullan覺lan bir ara癟t覺r.

A癟覺klama

  • Selenium'un python dok羹mantasyonu i癟in buraya bakabilirsin

    • 襤tici bir dok羹mantasyon ar覺yorsan buraya bakabilirsin

Python dili ve Chromedriver baz al覺nm覺t覺r.

Seleinium Kurulumu

Selenium taray覺c覺 driver'覺 kullanarak 癟al覺maktad覺r

  • ChromeDriver'覺 buradan indirin

  • ChromeDriver'覺n覺z覺 uygun bir konuma koyun, ileride yol verisi selenium'a aktar覺lacakt覺r

Projenizin i癟erisinde utils dizini a癟覺p i癟ine chromedriver adl覺 dosyay覺 atabilirsiniz, ileride bu ekilde deerlendirilecektir

Conda zerinden Kurulum

Selenium i癟in 繹zel ortam olutururak kurulum yapmak daha sal覺kl覺d覺r.

conda create -n selenium selenium

Kurulum sonras覺nda ortam覺 conda activate selenium ile aktif etmeyi unutmay覺n.

Chromedriver'覺 Yap覺land覺rma

Aray羹z Olmadan Chromedriver'覺 Kullanma (襤stee Bal覺)

Selenium arac覺 chrome 羹zerinde 癟eitli 繹zelliklerle 癟al覺abilmekte (繹rn: aray羹z olmadan, sessizce 癟al覺abilir)

Google colab 羹zerinde kullanmak istersen bu ayarlar zorunludur, kaynaa buradan eriebilirsin.

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-setuid-sandbox')

Chromedriver'覺 oluturma

Chromedriver 繹esini oluturmak i癟in alttaki yap覺y覺 kullanmak zorunday覺z:

T羹m ilemleri oluturduumuz driver objesi ile yapmaktay覺z.

# Mod羹l羹 dahil etme
from selenium import webdriver
driver = webdriver.Chrome(
executable_path=<chromedriver_yolu>,
options=<ek_ayarlar>
)
  • <chromedriver_yolu> Chromedriver dosyas覺n覺n yolu

    • rn: "utils/chromedriver"

  • <ek_ayarlar> Ek yap覺land覺rma ayarlar覺 (襤stee bal覺)

    • rn: Yukar覺daki alanda tan覺mlanan options objesi

Websitesine Erime

driver.get(<URL>)
  • <URL> Girmek istediimiz sitenin adresi

    • rn: "www.yemreak.com"

Websitesinde Eleman Bulma

Kullan覺m ekli driver.<eleman_bulma_metodu> eklindedir.

Kaynak i癟in buraya bakabilirsin.

  • find_element_by_id

  • find_element_by_name

  • find_element_by_xpath

  • find_element_by_link_text

  • find_element_by_partial_link_text

  • find_element_by_tag_name

  • find_element_by_class_name

  • find_element_by_css_selector

Websitesinde oklu Eleman Bulma

  • find_elements_by_name

  • find_elements_by_xpath

  • find_elements_by_link_text

  • find_elements_by_partial_link_text

  • find_elements_by_tag_name

  • find_elements_by_class_name

  • find_elements_by_css_selector

Websitesine 襤癟erik Bekleyerek Erime

Bazen websiteleriindeki i癟erikler y羹klenmeden ilem yapmak istemeyiz. Bunun i癟in WebDriverWait objesini kullanmaktay覺z.

Temel kullan覺m:

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver, <bekleme_s羹resi>).<bekleme_ekli>(
EC.<koul>(<tan覺mlay覺c覺>)
)
  • <bekleme_s羹resi> En uzun bekleme s羹resi. Eer bu vakte kadar istenen salanmazsa hata f覺rlat覺r (TimoutException)

    • rn: 10 10 saniye bekler, koul salanmazsa hata f覺rlat覺r

  • <bekleme_ekli> Koul olana kadar ya da olmayana kadar bekleme

    • until Koul olana kadar bekle

    • until_not Koul olmayana kadar bekle

  • <koul> Selenium'a 繹zg羹 bekleme koulu

    • Selenium koullar覺n覺n listesine buradan eriebilirsin.

    • Selenium bekleme koullar覺n覺n detay覺 i癟in buraya bakabilirsin.

    • rn: presence_of_element_located Eleman oluana kadar bekleme

T羹m ilemler try - except blou aras覺nda yap覺laml覺d覺r, aksi takdirde ufak sorunlarda program覺n覺z kapanacakt覺r.

Eleman Oluana Kadar Bekleme

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
try:
driver.get(config.URL) # Siteye erime
# ID'si verilen eleman覺n olumas覺n覺 bekleme
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "yemreak"))
)
# Class ismi verilen eleman覺n olumas覺n覺 bekleme
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "active"))
)
# CSS'i verilen eleman覺n olumas覺n覺 bekleme
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.yemreak"))
)
finally:
driver.close() # Driver'覺 kapatma

Websitesinde Javascript Derleme

Javascript'i driver.execute_script("<script>") metodu ile derleyebilirsin.

  • <script> Javascript metni

Dosyadan Javascript Derleme

Dosyada javascript derlemek i癟in dosyay覺 jsmin mod羹l羹 ile minify etmen gerekmektedir.

from jsmin import jsmin
def minify(file_path):
""" Dosyay覺 minify etme
"""
with open(file_path) as js_file:
return jsmin(js_file.read(), quote_chars="'\"`")
driver.execute_script(minify(<dosya_yolu>))
  • <dosya_yolu> Minify edilecek ve derlenecek dosyan覺n yolu

    • rn: javascripts/yemreak.js

Javascript 襤lemleri

Javascript i癟in 繹nemli notlar:

  • Javascript objelerinin tan覺mlanmas覺 i癟in window. 繹n eki ile yapman gerekmekte, aksi takdirde selenium i癟erisinde kullanamazs覺n.

    • Objeleri kullan覺rken window. 繹n ekini kullanmana gerek yoktur.

  • Javascript verilerini python koduna almak i癟in scriptine return anahtar kelimesi eklemen gerekmektedir.

// main.js dosyas覺
window.temp = () => {
console.log("Yemreak")
}
window.deger = 5
function calismas() {
console.log("Bu metodu selenium bulamaz")
}
driver.execute_script(minify("main.js"))) # Javascript dosyas覺n覺 derler
driver.execute_script("temp()") # Yemreak yazar
driver.execute_script("calismaz()") # Metod bulunamad覺 hatas覺 verir
driver.execute_script("return deger") # 5 deerini d繹nd羹r羹r

Harici Balant覺lar