Selenyum Kurulumu
Kullanmadan önce SELENYUM python'da modül, onu kurmamız gerekiyor. Yüklemek için terminalde aşağıdaki komutu çalıştırın.
pip yükleme selenyumVEYA
pip3 selenyum yükleyinBu yüklenecek SELENYUM modül ve şimdi kullanıma hazır.
Web Sürücüleri
SELENIUM modülünü kullanarak web tarayıcısını otomatikleştirmeden önce, seçilen tarayıcının web sürücüsü gereklidir. Chrome Tarayıcıyı otomatikleştirmek için Chrome web sürücüsüne sahip olmalıyız. Web sürücü dosyasının yerleştirildiği yol argüman olarak iletilir. Web sürücüsü, bir protokol aracılığıyla web tarayıcısıyla etkileşime girer. Farklı tarayıcıların Web sürücülerini indirmek için aşağıdaki bağlantıya gidin.
https://www.selenyum hq.kuruluş/indir/
Başlarken
Gerekli modülleri kurduktan sonra python CLI'yi açıp tarayıcınız ile oynamaya başlayabilirsiniz. Öyleyse önce web sürücüsünü ve diğer modülleri içe aktaralım, bu modüller ve sınıflar Python programınızın tarayıcınıza tuş vuruşlarını ve diğer bilgileri göndermesine izin verecektir.
C:\Users\Usama Azad>pythonpiton 3.6.4 (v3.6.4:d48eceb, 19 Aralık 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] win32'de
Daha fazla bilgi için "yardım", "telif hakkı", "kredi" veya "lisans" yazın.
>>> selenyum içe aktarma web sürücüsünden
>>> selenyumdan.web sürücüsü.Yaygın.anahtarları içe aktarma Anahtarları
#krom sürücülerinize giden yol
>>> sürücü = web sürücüsü.Chrome('C:\chromedriver')
Bu, sizin için yeni bir Chrome tarayıcı penceresi açacaktır. Artık kullanarak herhangi bir web sitesine gitmek için selenyum alabilirsiniz .get() yöntemi. Bu yöntem web sitesini açar ve yüklenmesini bekler, ardından bir sonraki komutunuzu girebilirsiniz.
>>> sürücü.al("https://www.Facebook.com")
Bir Web Sayfasındaki Öğeler Nasıl Bulunur?
Aşağıdaki yöntemi kullanarak bir web sayfasında belirli bir öğeyi bulabiliriz.
- Her şeyden önce, basın F12 Aşağıda gösterildiği gibi pencerenin sağ tarafında bir kaynak sayfa açılır
- Şimdi basın 'Ctrl+Üst Karakter+C' veya kaynak sayfanın sol üst köşesinde bulunan sembole tıklayın.
- ' üzerindeki oku hareket ettirinEposta ya da telefon' alanı ve tıklayın. Bu öğe seçilecek ve bu öğenin kaynak kodu aşağıda gösterildiği gibi kaynak sayfada vurgulanacaktır. Seçilen eleman için aşağıdaki niteliklere sahip olduğumuz görülebilir
- isim = "e-posta"
- sınıf= “inputtext login_form_input_box”
- id= "e-posta"
bulabiliriz'Eposta ya da telefon' öğesi, yukarıdaki özelliklerden herhangi birini kullanarak.
- Yukarıda belirtilen niteliklerden herhangi birine sahip değilsek, ' kullanarak öğeyi de seçebilirizXPath'. XPath'i kopyalamak için kaynak sayfada vurgulanan kaynak koduna sağ tıklayın. Sonra şuraya git 'Kopyala > XPath'i Kopyala'.
Selenyum kullanarak Elemanları Bulma
Bir web sayfasındaki öğeleri bulmak için kullanırız 'find_element' yöntem. Aşağıdakiler 'find_element' yöntemleri mevcut SELENYUM.
- find_element_by_class_name(ad)
- find_element_by_tag_name(ad)
- find_element_by_link_text(metin)
- find_element_by_css_selector(selektör)
- find_element_by_name(isim)
- find_element_by_id(id)
- find_element_by_xpath(XPath)
Yukarıdaki yöntemleri kullanarak bir web sayfasındaki bir öğeyi bulabilir ve bunu otomasyon kodumuzda kullanabiliriz.
Farklı web sayfası öğelerine tıklamak
selenyumdaki click() yöntemi, yukarıdaki yöntemleri kullanarak bulduğunuz farklı bağlantılara ve düğme öğelerine tıklamak için kullanılabilir. Örneğin, “Unutulan hesap?” Facebook sayfasında
>>> link_button = sürücü.find_element_by_link_text('Unutulan hesap?')>>> link_button.Tıklayın()
Özel Anahtarlar Gönder
Selenium ayrıca özel anahtarlar göndermenizi sağlayan bir modüle sahiptir (e.g, Enter, Escape, Page down, page up vb) web'de gezinirken. Aşağıdaki komutu kullanarak bu modülü içe aktarmanız gerekir
>>> selenyumdan.web sürücüsü.Yaygın.anahtarları içe aktarma AnahtarlarıÖrneğin, Wikipedia'da Amerika Birleşik Devletleri tarihi hakkında bir makale okuyorsunuz, ancak bir süre sonra AŞAĞI Ok tuşuna basamayacak kadar tembelsiniz. Selenium kullanarak bu anahtarı tarayıcıya göndererek otomatikleştirebilirsiniz
selenyum ithalat web sürücüsündenselenyumdan.web sürücüsü.Yaygın.anahtarları içe aktarma Anahtarları
ithalat zamanı
sürücü = web sürücüsü.Chrome('C:\chromedriver')
#get yöntemini kullanarak makale bağlantısını aç
sürücü.get("https://tr.wikipedia.org/wiki/United_States")
#Sayfanın başından başla
eleman = sürücü.find_element_by_tag_name('html')
Doğru iken:
zaman.uyku(5)
element.send_keys(Anahtarlar.AŞAĞI)
Tarayıcı Nasıl Otomatikleştirilir
Bu bölümde, bazı kullanım durumlarının yardımıyla web tarayıcımızı nasıl otomatikleştireceğimizi göreceğiz.
Sosyal Medya Web Sitelerine Otomatik Olarak Giriş Yapın
Web otomasyonu ile giriş işlemlerinizi kolaylıkla otomatik hale getirebilirsiniz. Sosyal medya web sitelerinizi belirli bir saatte (örneğin akşam 8 gibi) düzenli olarak kontrol ediyorsanız, bu işlemi otomatikleştirmek iyi olur. Aşağıdaki iki sosyal medya sitesi 'facebook' ve 'twitter' kullanarak oturum açma işlemini otomatikleştirmek için kod aşağıdadır SELENYUM Python'da modül.
# web sürücüsünü selenyum modülünden içe aktarmaselenyum ithalat web sürücüsünden
# selenyumdan özel Anahtarları içe aktarma
selenyumdan.web sürücüsü.Yaygın.anahtarları içe aktarma Anahtarları
# 'Google-Chrome' için 'sürücü' nesnesi oluşturma
sürücü = web sürücüsü.Chrome('Chrome sürücüsüne giden yol')
# pencereyi büyütme
sürücü.maksimize_pencere()
#facebook'u açma
sürücü.almak('http://www.Facebook.com')
# 'id' özniteliğini kullanarak 'E-posta veya Telefon' öğesini bulma
kullanıcıAdı = sürücü.find_element_by_id('e-posta')
# facebook için kullanıcı adı veya e-posta girme
Kullanıcı adı.send_keys('Kullanıcı Adını/E-posta Adresini Girin')
# 'id' özniteliğini kullanarak 'Parola' öğesini bulma
şifre = sürücü.find_element_by_id('geçti')
#facebook için şifre girme
parola.send_keys("Şifreyi Girin")
# 'id' özniteliğini kullanarak 'giriş düğmesi' öğesini bulma ve 'Enter' tuşuna basma
sürücü.find_element_by_id('u_0_b').send_keys(Anahtarlar.GİRİŞ)
# twitter için yeni sekme açma
sürücü.yürütme_script("pencere.aç('http://www.twitter.com', 'tab2');")
# yeni sekmeye geçiş
sürücü.switch_to_window('tab2')
#'giriş' öğesini bulma ve üzerine tıklama
sürücü.find_element_by_xpath('//*[@id="doc"]/div/div[1]/div[1]/div[2]/div[1]').Tıklayın()
# 'Telefon, e-posta veya kullanıcı adı' öğesini bulma
kullanıcıAdı = sürücü.find_element_by_xpath('//*[@id="sayfa-konteyner"]/div/div[1]/form/
fieldset/div[1]/input')
# twitter için kullanıcı adı girme
Kullanıcı adı.send_keys('Kullanıcı Adını Girin')
# 'Parola' öğesini bulma
şifre = sürücü.find_element_by_xpath('//*[@id="sayfa-konteyner"]/div/div[1]/form/
alan kümesi/div[2]/input')
# twitter için şifre girme
parola.send_keys('Şifreyi Girin')
# 'giriş yap' düğmesini bulup üzerine tıklamak
sürücü.find_element_by_xpath('//*[@id="sayfa-konteyner"]/div/div[1]/form/div[2]/button')
.Tıklayın()
Yukarıdaki kod, tarayıcının sosyal medya web sitelerine giriş yapmasını otomatikleştirir. Öncelikle favori tarayıcımızın bir nesnesini yarattık. Bu kullanım örneğinde tarayıcı olarak 'Chrome'u aldık. Nesne oluşturmak için 'chromedriver'ımızın yolunu argüman olarak geçtik. Ardından facebook'un url'sini girdik ve öğeleri seçip kullanıcı adı ve şifreyi geçerek Facebook'a giriş yaptık.
Bundan sonra yeni bir sekme açtık ve twitter url'sini girdik. Bundan sonra ikinci sekme açık olmasına rağmen kodun kontrolü hala ilk sekmede olduğu için yeni sekmeye geçtik. Ardından öğeleri seçip kullanıcı adı ve şifreyi geçerek Twitter'a giriş yaptık.
Çevrimiçi Alışveriş Otomasyonu
Tarayıcı otomasyonunun bir başka güzel örneği de online alışveriş olabilir. Örneğin internetten kamera almak istiyorsunuz ama fiyatlar çok yüksek. Fiyatın sizin aralığınızda olup olmadığını her gün kontrol edersiniz. Bu görev kullanılarak otomatikleştirilebilir SELENYUM ve her gün fiyatı kontrol etmekten kaçınabilirsiniz. Aşağıdaki kod, istediğiniz ürünün fiyatının uygun olup olmadığını size mail yoluyla bildirecektir. İstediğiniz ürün indirimde ise program sizi e-posta ile bilgilendirecektir.
# web sürücüsünü selenyum modülünden içe aktarmaselenyum ithalat web sürücüsünden
# posta göndermek için smtplib modülünü içe aktarma
smtplib'i içe aktar
# e-posta yoluyla bilgilendirmek için posta işlevini tanımlama
tanımlı posta():
# alan adı ve port numarası ile gmail sunucusuna bağlantı kurulması.
Bu, her e-posta sağlayıcısına göre değişir
bağlantı = smtplib.SMTP('smtp.gmail.com',587)
# sunucuya merhaba de
bağ.ehlo()
# şifreli TLS bağlantısı başlatılıyor
bağ.starttls()
# ana adresiniz ve şifrenizle gmail sunucusuna giriş yapın
bağ.login('gönderen mail adresi', 'şifre')
# kendinize fotoğraf makinesinin fiyatını bildiren bir mail göndererek
bağ.sendmail('gönderen mail adresi', 'alıcı mail adresi',
'Konu: Kamerayı Satın Alabilirsiniz')
# bağlantı sonlandırılıyor
bağ.çıkmak()
# posta işlevi burada biter
# bir argüman olarak chromedriver yolunu sağlayarak google chrome'u başlatma
sürücü = web sürücüsü.Chrome('chromedriver yolu')
# krom pencereyi simge durumuna küçültme
sürücü.simge durumuna küçült_pencere()
# açılış drazı.pk sitesi
sürücü.almak('https://www.daraz.pk/')
# kamera aramak için id niteliğini kullanarak arama çubuğunun yerini bulma
searchBar = sürücü.find_element_by_id('q')
#arama çubuğuna kamera yazma
arama çubuğu.send_keys('kamera')
# elementin xpath'ını kullanarak arama düğmesi öğesini bulma
arama = sürücü.find_element_by_xpath('//*[@id="topActionHeader"]/div/div[2]/div/div[2]
/form/div/div[2]/düğme')
#arama düğmesine tıklayarak
arama.Tıklayın()
# xpath niteliğini kullanarak istediğiniz ürünün yerini belirleme
ürün = sürücü.find_element_by_xpath('//*[@id="root"]/div/div[3]/div[1]/div/div[1]
/div[2]/div[1]/div/div/div[2]/div[2]/a')
# istediğiniz ürüne tıklayarak
ürün.Tıklayın()
# xpath niteliğini kullanarak fiyatın yerini belirleme
fiyat = sürücü.find_element_by_xpath('//*[@id="module_product_price_1"]/div/div/span')
# fiyat öğesinden metin çıkarma. Bu, 'Rs gibi ürünün fiyatını verir. 24.500'
fiyat = fiyat.Metin
# fiyatı dizgeye dönüştürmek
Fiyat = str(fiyat)
# boş bir dizi tanımlama. Bu, '24500' gibi rakamlardan fiyat çıkarmak için kullanılacaktır
'R'ler oluştur. 24.500'
sayı = []
# for döngüsünü kullanarak fiyat dizisinin tüm girişlerini tek tek okumak
fiyat olarak x için:
# fiyatta sadece rakam istediğimiz için girişin rakam olup olmadığını kontrol etmek
eğer x.isdigit():
# num listesine sadece rakam ekleme
sayı.ekle(x)
# num list'in tüm girişlerini birleştirmek. Şimdi fiyat, yalnızca rakamları içeren bir dizedir
fiyat = ".katıl(sayı)
# fiyat dizisini tam sayıya dönüştürme
fiyat = int(fiyat)
# fiyatın uygun olup olmadığını kontrol etme
eğer fiyat <= 25000:
# fiyat hakkında sizi bilgilendirmek için arama posta işlevi
posta()
# tarayıcıyı kapat
sürücü.çıkmak()
Yukarıdaki kod daraz'ı açar.pk sitesi ve kamerayı arar ve fiyatı uygunsa e-posta yoluyla sizi bilgilendirir. Öncelikle ithal ettik SELENYUM ve SMTPLIB modüller. Ardından, arandığında fiyatın uygun olduğunu bildiren mail gönderen 'mail' fonksiyonunu tanımladık.
Bundan sonra chromedriver kullanarak chrome tarayıcıyı açtık ve 'daraz'ı aradık.pk'. Ardından, elemanları ve niteliklerini kullanarak istediğimiz ürünü buluruz. Elementlerin nasıl bulunduğu ve yerleştirildiği yukarıda açıklanmıştır. Aldığımız fiyat bir diziydi, bu yüzden bu diziyi tamsayıya dönüştürdük ve ardından fiyatın uygun olup olmadığını kontrol ettik. Fiyat uygunsa 'posta' işlevini arayın.
Cron işi oluşturma
Yukarıdaki iki otomasyon komut dosyasının belirli bir zamanda günde bir kez çalışması gerekir. Bunu cron işi kullanarak yönetebiliriz. crontab'a eklenen görevler belirli bir zamanda tekrar tekrar çalıştırılabilir. Yukarıdaki görevleri crontab'a eklemek için öncelikle Linux Terminalinde aşağıdaki komutu çalıştırın.
[e-posta korumalı]:~$ crontab -eYukarıdaki komut, düzenlemek için crontab dosyasını açacaktır. Dosyanın sonunda aşağıdaki komutu girin.
0 8 * * * python /path/to/python/scriptSağdan sola komuttan önce girişleri görüyoruz.
- Sağdan ilk yıldız işareti, bu komutun haftanın her günü çalışacağı anlamına gelir.
- İkinci yıldız işareti, bu komutun her ay çalışacağı anlamına gelir
- Üçüncü yıldız işareti, bu komutun ayın her günü çalışacağını gösterir
- Dördüncü giriş '8'dir, yani bu komut dosyası günün 8. saatinde çalışacaktır
- '0' olan beşinci giriş, bu komutun 0. dakikada çalışacağı anlamına gelir.
Yani bu komut her gün saat 8'de çalışacak.
Sonuç
Bu yazıda, nasıl kullanabileceğinizi tartıştık SELENYUM farklı teknikler kullanarak tarayıcınızı otomatikleştirmek için Python ile birlikte. Günlük rutin işlerinizi otomatik hale getirebilir, formları doldurabilir, eşyalarınızı indirebilir ve daha bir çok şeyi kullanabilirsiniz. Burada yalnızca iki örneği ele aldık, ancak bir insanın tarayıcıyla manuel olarak yapabileceği her şeyi otomatik hale getirebilirsiniz.