Python dili ve Chromedriver baz alınmıştır.
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çinechromedriver
adlı dosyayı atabilirsiniz, ileride bu şekilde değerlendirilecektir
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.
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 öğ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 webdriverdriver = 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
<URL>
Girmek istediğimiz sitenin adresi
Örn: "www.yemreak.com"
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
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
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 WebDriverWaitWebDriverWait(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
Tüm işlemler
try
-except
bloğu arasında yapılamlıdır, aksi takdirde ufak sorunlarda programınız kapanacaktır.
from selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.ui import WebDriverWaittry: 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()
Javascript'i driver.execute_script("<script>")
metodu ile derleyebilirsin.
<script>
Javascript metni
Dosyada javascript derlemek için dosyayı jsmin
modülü ile minify etmen gerekmektedir.
from jsmin import jsmindef 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 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 = 5function 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")