Comment on page
🤖
Selenium
Python dili ve Chromedriver baz alınmıştır.
Selenium tarayıcı driver'ı kullanarak çalışmaktadır
- ChromeDriver'ınızı uygun bir konuma koyun, ileride yol verisi selenium'a aktarılacaktır
Projenizin içerisindeutils
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)
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ğumuzdriver
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.- 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 beklemeuntil
Koşul olana kadar bekleuntil_not
Koşul olmayana kadar bekle
Tüm işlemlertry
-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")
Last modified 1mo ago