Selenium Nedir? Python ile Selenium Kullanımı

Selenium Nedir?

Selenium, test mühendislerinin yazılım ve web uygulamalarının kalitesini artırmak için kullandığı güçlü bir otomasyon aracıdır. Bu araç, test mühendislerine web tabanlı uygulamaların farklı bileşenlerini otomatik olarak kontrol etme ve test etme yeteneği sağlar. Selenium sayesinde, test mühendisleri interaktif test senaryolarını kolayca oluşturabilir, tarayıcı etkileşimlerini simüle edebilir ve kullanıcı deneyimini doğru bir şekilde değerlendirebilir. Bu da ürünün genel kalitesini ve istikrarını artırırken, hataların daha erken tespit edilmesine ve düzeltilmesine olanak tanır.

Selenium Kurulumu

Selenium’un ne olduğunu biraz anladığımıza göre kurulum işlemine geçelim. Bu adımlarda Python kurulumu ve path eklemeyi anlatmayacağım internetten rahatlıkla bulabilirsiniz.

Not: İşlemlerimizde şuan için Google Chrome kullanacağız.

pip install selenium

Pip ile kullanmak için kütüphanemizi indiriyoruz.

Chrome üzerinden Ayarlar > Chrome hakkında sekmesine giriyor ve şuan kullandığımız Chrome sürümünü öğreniyoruz. Örneğin şuanda 116.0.5845.97 sürümünü kullanıyorum. Eğer Chrome versiyonunuz 115 altında ise https://chromedriver.chromium.org/downloads sayfasından size uygun sürümü indirip kullanabilirsiniz. Bizim şuan kullandığımız sürüm 115 üstünde olduğu için https://googlechromelabs.github.io/chrome-for-testing/ sayfasına giderek indirme işlemini sağlıyoruz.

İndirmiş olduğumuz zip dosyasından masaüstüne çıkartıyoruz ve artık kodlama yapmaya hazırız. Hadi ilk kodumuzu yazalım.

Kodlamaya Başlangıç

Hemen Visual Studio Code programını açıp selenium-1.py dosyamızı masaüstüne kaydettik.

from selenium import webdriver

Modülümüze import ederek başladık.

Önceden Selenium 3.x sürümlerinde executable_path argümanı doğrudan webdriver.Chrome() veya diğer tarayıcı sürücülerini başlatırken kullanılabiliyordu. Ancak Selenium 4 sürümü ile birlikte bazı değişiklikler ve geliştirmeler geldi.

Selenium 4 sürümü ile birlikte, tarayıcı sürücülerini başlatırken sürücüyü yapılandırmak ve yönetmek için Service sınıfı daha sık kullanılmaya başlandı. Bu nedenle, executable_path argümanını kullanmak yerine sürücüyü Service sınıfıyla başlatmanız gerekebiliyor.

service = webdriver.chrome.service.Service('./chromedriver.exe')
service.start()
driver = webdriver.Chrome(service=service)

Chrome tarayıcısı kullanacağımızı belirttik ve tarayıcımızı başlattık. Python kodumuz ile chromedriver dosyamız iki dosyada aynı konumda olduğu için konum olarak ./chromedriver.exe yazarak başlattık.

Selenium Fonksiyonları

Get

Get fonksiyonu başlatmış olduğumuz tarayıcımızdan istediğimiz url adresini açmamızı sağlıyor. Fakat dikkat edilmesi gereken önemli noktalardan birisi sayfa tamamen yüklenmeden bir sonraki satıra geçmez kod.

driver.get('https://www.google.com')
time.sleep(5)
driver.quit()

Sayfamızı açmak için get url adresimizi verdik ve sayfayı açmaya başladı fakat tam olarak 5 saniye sonra sayfamızı kapatmadı. Bu durumun sebebi get fonksiyonu sayfanın yüklenme işleminin tamamen bitmesini bekledi ve daha sonra bir sonraki satıra geçti.

Quit

Quit fonksiyonu tarayıcıyı kapatmamızı sağlıyor. Çok fazla özellik beklememek gerek sadece tarayıcıyı kapatıyor 🙂

driver.quit()

Click

Click fonksiyonu bu yazının biraz daha ilerisinde öğreneceğimiz diğer fonksiyonlarla beraber kullanılarak hedeflediğimiz yere tıklama işlemi gerçekleştirmemizi sağlıyor.

Not: Henüz belirtilen hedefleme fonksiyonlarını öğrenmediğimiz için hedeflenmiş varsayıyor ve bunu göstermek için element değişkenini kullanıyoruz.

# element = driver.... ( 'Hedeflediğimizi varsayıyoruz')
element.click()

Send_Keys

Bu fonksiyon click fonksiyonu ile benzer şekilde hedeflediğimiz yere klavye üzerinden yazı yazmamızı sağlıyor. Bu sayede kullanıcı adı ve şifre giriş işlemleri gibi ilgili hedefe yazı göndermemizi sağlıyor.

element.send_keys("Merhaba okuyucu")

Text

Text ile hedeflemiş olduğumuz etiketin içerisindeki yazıyı almamızı sağlıyor. Bu almış olduğunuz yazıyı bir değişkene aktarıp daha sonra kullanabilirsiniz.

yazi = element.text

Get_attribute

Text ile benzer özelliğe sahiptir fakat text fonksiyonunda içerisindeki yazıyı alırken get_attribute ile hedeflemiş olduğunuz etikete ait özelliğin değerini alabilirsiniz. Aşağıdaki örnekte element ile daha önce resmi hedeflediğimizi varsayıyor ve resimin linki alarak bir değişkene aktarıyoruz.

resim_linki = element.get_attribute('src')

Get_attribute fonksiyonunun bir kaç özel parametreside mevcuttur bunlardan 2 tanesini inceleyeceğiz

Get_attribute – innerHTML

Bir HTML öğesinin içeriğini alır. İçeriğin yalnızca metin değil, iç içe öğeleri ve metni içerebilir. Düşünün ki bir <div> öğesinin içinde bir metin ve başka öğeler varsa, innerHTML bu içeriği alır. Yani içerideki her şeyi alır.

inner_html = element.get_attribute("innerHTML")

Get_attribute – outerHTML

Bir HTML öğesinin tümünü alır, yani öğenin kendisini ve içeriğini. Dolayısıyla, outerHTML kullanıldığında seçilen öğenin etiketleriyle birlikte içeriği de dahil edilir. Örneğin, <div> öğesini seçerseniz, bu öğenin kendisi ve içeriği (iç içe öğeleri dahil) outerHTML ile alınır.

outer_html = element.get_attribute("outerHTML")

Kısacası, innerHTML iç içe öğeleri ve metni alırken, outerHTML öğenin kendisi ve içeriğini tam olarak alır.

Find_element ve find_elements

Bu başlıkta yukarıda bahsetmiş olduğumuz hedefleme işlemini göreceğiz. Find_element ve find_elements fonksiyonlarını kullanarak istediğinizi elemente ulaşmanızı sağlıyor ve daha sonra yukarıda görmüş olduğunuz diğer fonksiyonları kullanabiliyorsunuz.

Not: Selenium’da daha öncesinde find_element_by_id() diyerek kullanım sağlayabiliyorduk fakat gelen güncelleme ile bu işlemde değişti. Rahat kullanım sağlamak için import etmemiz gereken bir kısım daha mevcut.

from selenium.webdriver.common.by import By

Kullanabileceğiniz İşaretçiler

Bu alanda tarayıcınızın içerisindeki Element bölümü ile oldukça samimi olacağız iyi alışmaya çalışın 🙂 Bulunduğunuz sayfa içerisinde boş bir alanda sağ tıklayarak incele butonu basabilirsiniz. Şuanda anlatılacak örnekler www.baristeksin.com.tr üzerinden örneklendirilerek anlatılacaktır bu yüzden kodları denemeden önce aşağıdaki kodu yazmayı unutmayın.

from selenium import webdriver

service = webdriver.chrome.service.Service('./chromedriver.exe')
service.start()
driver = webdriver.Chrome(service=service)
driver.get('https://www.baristeksin.com.tr')
By.ID

Örnek olarak burada id özelliğinin değeri menu-item-194 biz eğer bu div etiketine doğrudan erişmek isteseydik yani CV butonuna click fonksiyonu ilet tıklayıp o linke gitmeyi isteseydik yazmamız gereken kod aşağıdaki gibi olacaktı.

alan = driver.find_element(By.ID,'menu-item-194').click()
By.NAME

Şimdi ise burada content içerisinde bulunan WordPress versiyonunu alalım ve bir değişkene aktaralım.

versiyon = driver.find_element(By.NAME,'generator').get_attribute('content')
print(versiyon)
By.CLASS_NAME

Class’ları kullanarak da hedefe erişim sağlayabiliriz. Dilerseniz bunuda hızlıca bir örnekle sitenin sol üst köşesinde bulunan Barış Teksin yazısına tıklayarak örnekleyelim.

driver.find_element(By.CLASS_NAME, 'main-title').click()
By.TAG_NAME

TAG_NAME html dosyası içerisindeki etiketleri aramanızı sağlar. Bu sefer iç içe aramayıda beraberinde göstermiş olacağız.

menuler = driver.find_element(By.ID, 'primary-menu').find_elements(By.TAG_NAME, 'li')
for menu in menuler:
    print(menu.text)

Bu örnekte ilk başta id değeri primary-menu olan div elementine ulaştık daha sonrasında ise find_elements ile TAG_NAME yani li etiketlerini bir liste içerisinde aldık ve bunu menuler değişkenine aktardık daha sonra for döngüsü ile sırasıyla listeyi gezdik ve hepsinin text değerini yazdırdık.

By.CSS_SELECTOR

Css selector kullanarak hedefe erişim yapmanızı sağlar. Yukarıda yazmış olduğumuz örneği şimdi CSS_SELECTOR kullanarak yapalım.

menuler = driver.find_element(By.CSS_SELECTOR, '#primary-menu').find_elements(By.TAG_NAME, 'li')
for menu in menuler:
    print(menu.text)
By.XPATH

Öncelikle şunu belirtmeliyim ki xpath’i mecbur değilseniz hiç tavsiye etmem sebebi ise xpath konum belirtir eğer üstüne öncesine site tarafından bir şey eklenirse veya bazı ufak değişikliklerde yazacağınız kod çalışmayacaktır. Chrome üzerinde Copy > Copy XPath bulunmaktadır.

menuler = driver.find_elements(By.XPATH, '//*[@id="menu-primary-marketer"]/li')
for menu in menuler:
    print(menu.text)

Find_element ve Find_elements Farkı

En basit tanımıyla find_element tekil, find_elements ise çoğul olarak olarak düşünebilirsiniz. find_element yazdığınızda direkt hedeflediğiniz tek 1 elemente gidersiniz ve bu her zaman belirttiğiniz özelliğe ait en başta bulunan element olur, find_elements ise size o özelliğe ait olan tüm elementleri bir liste halinde döndürür bunu daha sonra istediğiniz şekilde kullanabilirsiniz.

Selenium’u anlattığımız yazımızın 1. bölümünün sonuna geldik.

Selenium ile bot yazdığımız 2. bölüm yayınlandı Selenium Yorum Botu – İlk Botumuzu Yazalım tıklayarak öğrendiklerimiz ile ilk botunuzu yazmaya başlayabilirsiniz.

Sorularınız olursa yorum olarak yazabilirsiniz.

“Selenium Nedir? Python ile Selenium Kullanımı” üzerine 4 yorum

  1. Bu kaliteli selenium blog yazısı için sana teşekkür etmek istiyorum. Yazına yorum yapabilmek için sonuna kadar okumak zorunda kaldım. Seni daha fazla meraklandırmadan büyük sırrımı paylaşmak istiyorum. Bu yorumu Mesut As tarafından Selenium kullanılarak bot olarak oluşturulduğum için otomatik yazıyorum. Lütfen Blog yazındaki yazım hatalarını gözden geçir.

    Yanıtla
    • Merhaba öncelikle yazımı okuduğun için teşekkür ederim çok mutlu etti. Instagram üzerinden paylaşmış olduğun videoyu izledim. Geliştirmen gereken ve daha dikkatli okuman gereken kısımlar var XPATH kısmını daha dikkatli okumanı öneririm.
      “Öncelikle şunu belirtmeliyim ki xpath’i mecbur değilseniz hiç tavsiye etmem sebebi ise xpath konum belirtir eğer üstüne öncesine site tarafından bir şey eklenirse veya bazı ufak değişikliklerde yazacağınız kod çalışmayacaktır.”

      Yanıtla
      • xpath kullanma sebebim bu konuda yaşanabilecek sorunlara parmak basmaktı , dikkat çekmek de diyebiliriz. bu yorumları okuyanlar xpath kullanmanın ne kadar en ufak değişiklikte kullanılamaz olacağını öğrenmiş olacaklar.

        Yanıtla

Yorum yapın