🤖Selenium

🗽 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 değerlendirilecektir

Conda Üzerinden Kurulum

Selenium için özel ortam oluştururak kurulum yapmak daha sağlı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 (İsteğe Bağlı)

Selenium aracı chrome üzerinde çeşitli özelliklerle çalışabilmekte (örn: arayüz olmadan, sessizce çalışabilir)

Google colab üzerinde kullanmak istersen bu ayarlar zorunludur, kaynağa buradan erişebilirsin.

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

Chromedriver'ı oluşturma

Chromedriver öğesini oluşturmak için alttaki yapıyı kullanmak zorundayız:

Tüm işlemleri oluşturduğumuz driver objesi ile yapmaktayız.

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ı (İsteğe bağlı)

    • Örn: Yukarıdaki alanda tanımlanan options objesi

Websitesine Erişme

  • <URL> Girmek istediğimiz 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 Erişme

Bazen websiteleriindeki içerikler yüklenmeden işlem yapmak istemeyiz. Bunun için WebDriverWait objesini kullanmaktayız.

Temel kullanım:

from selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.ui import WebDriverWait​WebDriverWait(driver, <bekleme_süresi>).<bekleme_şekli>(    EC.<koşul>(<tanımlayıcı>))
  • <bekleme_süresi> En uzun bekleme süresi. Eğer bu vakte kadar istenen sağlanmazsa hata fırlatır (TimoutException)

    • Örn: 10 10 saniye bekler, koşul sağlanmazsa hata fırlatır

  • <bekleme_şekli> Koşul olana kadar ya da olmayana kadar bekleme

    • until Koşul olana kadar bekle

    • until_not Koşul olmayana kadar bekle

  • <koşul> Selenium'a özgü bekleme koşulu

    • Selenium koşullarının listesine buradan erişebilirsin.

    • Selenium bekleme koşullarının detayı için buraya bakabilirsin.

    • Örn: presence_of_element_located Eleman oluşana kadar bekleme

Tüm işlemler try - except bloğu arasında yapılamlıdır, aksi takdirde ufak sorunlarda programınız kapanacaktır.

Eleman Oluşana Kadar Bekleme

from selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.ui import WebDriverWait​try:    driver.get(config.URL) ​    WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.ID, "yemreak"))    )​    WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.CLASS_NAME, "active"))    )​    WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.CSS_SELECTOR, "div.yemreak"))    )finally:    driver.close() 

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.

window.temp = () => {    console.log("Yemreak")}​window.deger = 5​function calismas() {    console.log("Bu metodu selenium bulamaz")}
driver.execute_script(minify("main.js"))) driver.execute_script("temp()") driver.execute_script("calismaz()") driver.execute_script("return deger") 

Harici Bağlantılar

Last updated

© 2024 ~ Yunus Emre Ak ~ yEmreAk