Selenium ile Sınıf bazlı toplu eokul fotosu ekleme

Kodla Büyü

soncizgi

Aktif Üye
Mesajlar
150
Arkadaşlar belki bazılarının işine yarar diye kodları aşağıda paylaşıyorum.
Diyelim 5a sınıfının fotolarını çekip düzenlemesini yaptınız.
Yapmanız gereken
1- Fotoların dosya adları öğrenci noları yapmanız.
2- Sınıf adının bulunduğu select kutusunda indexini bulup ayarlamak.
Gerisini sizin yerine kodlar hallediyor. Bugün 2 sınıfın fotoları için test ettim. Sorun oluşmadı.
Kod:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import time
import os
#Eleman kontrol
def kontrol_xpath(Driver: webdriver,xpath):
    try:
        Driver.find_element_by_xpath(xpath)
    except NoSuchElementException:
        return False
    return True

browser=webdriver.Firefox(executable_path=r'D:\python\geckodriver.exe')

browser.get("https://e-okul.meb.gov.tr/")

girisYap=browser.find_element_by_xpath('/html/body/form/section[1]/div/div/a[1]/img')
girisYap.click()

user=browser.find_element_by_name('txtKullaniciAd')
sifre=browser.find_element_by_name('txtSifre')
user.send_keys('kullanıcı adınız....')
sifre.send_keys('şifreniz....')
time.sleep(5)
girisYap=browser.find_element_by_xpath('//*[@id="btnEokulGiris"]')
girisYap.click()

kurum=browser.find_element_by_xpath('/html/body/form/nav/div/div/ul[1]/li[2]/a/span[2]')
kurum.click()


resim=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[1]/div/div/table/tbody/tr/td/table[4]/tbody/tr[3]/td/table[1]/tbody/tr/td')
resim.click()

resekle=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[1]/div/div/table/tbody/tr/td/table[4]/tbody/tr[3]/td/table[2]/tbody/tr[1]/td[2]')
resekle.click()

#5. Sınıf (Yabancı Dil Ağırlıklı) / D Şubesi
#Tümü

#//*[@id="ddlSinifiSubesi"]
# Find id of option
sinif = browser.find_element_by_id('ddlSinifiSubesi')
drop = Select(sinif)
# Seçilen sınıfın index'i yazılacak
#İlk eleman 0 dan başlıyor.
drop.select_by_index(10)

#//*[@id="ddlResimDurumlari"]
rsm = browser.find_element_by_id('ddlResimDurumlari')
drop2 = Select(rsm)
# Select by index
drop2.select_by_index(1)

listele=browser.find_element_by_xpath('//*[@id="btnListele"]')
listele.click()

bak=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[5]/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[2]/td[1]/a/img')
bak.click()
time.sleep(2)
#Sınıf kişi sayısı bulunyor
sayi=browser.find_element_by_xpath('//*[@id="lblKayitSayisi"]').text
#Tıklanan öğrencinin okul nosu alınıyor
ogrno=browser.find_element_by_id('txtOkulNo').get_attribute('value')

if os.path.exists('5k\\'+str(ogrno)+'.jpg'):
    sec=browser.find_element_by_id('flResimSec').send_keys('D:\\python\\eokul-foto-yukle\\5k\\'+ogrno+'.jpg')
    time.sleep(2)
    kaydet=browser.find_element_by_xpath('//*[@id="IOMToolbarActive1_kaydet_b"]/img')
    kaydet.click()

tt=sayi.split(' ')
#Toplam kişi sayısı alınıyor...
tpl=int(tt[0])

for x in range(3,tpl+2):
    bak=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[7]/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr['+str(x)+']/td[1]/a/img')
    bak.click()
    ogrno=browser.find_element_by_id('txtOkulNo').get_attribute('value')
    if os.path.exists('5k\\'+ogrno+'.jpg'):
        sec=browser.find_element_by_id('flResimSec').send_keys('D:\\python\\eokul-foto-yukle\\5k\\'+ogrno+'.jpg')
        time.sleep(3)
        kaydet=browser.find_element_by_xpath('//*[@id="IOMToolbarActive1_kaydet_b"]/img')
        kaydet.click()
    else:
        print(ogrno,'Foto yok!')
 
https://pratikeokul.blogspot.com hocam basit bir uygulama yapmıştım. Chrome 89 sürümüyle düzgün çalışıyor.
@tekin61 hocam, programda E-Okul Aç'ı tıkladığımda aşağıdaki hatayı alıyorum.

eeee.png
 
Arkadaşlar belki bazılarının işine yarar diye kodları aşağıda paylaşıyorum.
Diyelim 5a sınıfının fotolarını çekip düzenlemesini yaptınız.
Yapmanız gereken
1- Fotoların dosya adları öğrenci noları yapmanız.
2- Sınıf adının bulunduğu select kutusunda indexini bulup ayarlamak.
Gerisini sizin yerine kodlar hallediyor. Bugün 2 sınıfın fotoları için test ettim. Sorun oluşmadı.
Kod:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import time
import os
#Eleman kontrol
def kontrol_xpath(Driver: webdriver,xpath):
    try:
        Driver.find_element_by_xpath(xpath)
    except NoSuchElementException:
        return False
    return True

browser=webdriver.Firefox(executable_path=r'D:\python\geckodriver.exe')

browser.get("https://e-okul.meb.gov.tr/")

girisYap=browser.find_element_by_xpath('/html/body/form/section[1]/div/div/a[1]/img')
girisYap.click()

user=browser.find_element_by_name('txtKullaniciAd')
sifre=browser.find_element_by_name('txtSifre')
user.send_keys('kullanıcı adınız....')
sifre.send_keys('şifreniz....')
time.sleep(5)
girisYap=browser.find_element_by_xpath('//*[@id="btnEokulGiris"]')
girisYap.click()

kurum=browser.find_element_by_xpath('/html/body/form/nav/div/div/ul[1]/li[2]/a/span[2]')
kurum.click()


resim=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[1]/div/div/table/tbody/tr/td/table[4]/tbody/tr[3]/td/table[1]/tbody/tr/td')
resim.click()

resekle=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[1]/div/div/table/tbody/tr/td/table[4]/tbody/tr[3]/td/table[2]/tbody/tr[1]/td[2]')
resekle.click()

#5. Sınıf (Yabancı Dil Ağırlıklı) / D Şubesi
#Tümü

#//*[@id="ddlSinifiSubesi"]
# Find id of option
sinif = browser.find_element_by_id('ddlSinifiSubesi')
drop = Select(sinif)
# Seçilen sınıfın index'i yazılacak
#İlk eleman 0 dan başlıyor.
drop.select_by_index(10)

#//*[@id="ddlResimDurumlari"]
rsm = browser.find_element_by_id('ddlResimDurumlari')
drop2 = Select(rsm)
# Select by index
drop2.select_by_index(1)

listele=browser.find_element_by_xpath('//*[@id="btnListele"]')
listele.click()

bak=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[5]/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[2]/td[1]/a/img')
bak.click()
time.sleep(2)
#Sınıf kişi sayısı bulunyor
sayi=browser.find_element_by_xpath('//*[@id="lblKayitSayisi"]').text
#Tıklanan öğrencinin okul nosu alınıyor
ogrno=browser.find_element_by_id('txtOkulNo').get_attribute('value')

if os.path.exists('5k\\'+str(ogrno)+'.jpg'):
    sec=browser.find_element_by_id('flResimSec').send_keys('D:\\python\\eokul-foto-yukle\\5k\\'+ogrno+'.jpg')
    time.sleep(2)
    kaydet=browser.find_element_by_xpath('//*[@id="IOMToolbarActive1_kaydet_b"]/img')
    kaydet.click()

tt=sayi.split(' ')
#Toplam kişi sayısı alınıyor...
tpl=int(tt[0])

for x in range(3,tpl+2):
    bak=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[7]/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr['+str(x)+']/td[1]/a/img')
    bak.click()
    ogrno=browser.find_element_by_id('txtOkulNo').get_attribute('value')
    if os.path.exists('5k\\'+ogrno+'.jpg'):
        sec=browser.find_element_by_id('flResimSec').send_keys('D:\\python\\eokul-foto-yukle\\5k\\'+ogrno+'.jpg')
        time.sleep(3)
        kaydet=browser.find_element_by_xpath('//*[@id="IOMToolbarActive1_kaydet_b"]/img')
        kaydet.click()
    else:
        print(ogrno,'Foto yok!')

Hocam ben de selenium ile yapmaya çalıştım. Mebbis ten giris yaptırdıktan sonra eokul linkine tıklayamadım. Butonun xpath ini nasıl buluyorsunuz?
 
Hocam manuel elle eklerken bile çok zorlanıyoruz bu kod nasıl olacakta fotoları yükleyebilecek anlamıyorum. Yükleme sürelerini vs bekliyor mu?
Eokulda hızlı fotoğraf ekleme modülü tüm öğrencileri tek seferde seçip kaydete bir kere basmayla yüklese hiç sorun olmayacak. Fotoyu seçiyorsunuz dönüyor duruyor o arada işlem mi yapıyor ne yapıyor anlamış değilim, gece vakitleri eokul sunucuları yük altında değilken bile çok yavaş.
 
soncizgi yaptığınız programdan yaralanarak öğrencinin nüfus, anne bilgi ve baba bilgilerini mernisten güncelleyip kaydetmek için bir program yaptım. Nüfus kısmı oluyor ancak anne ve baba bilgi günceleme butonuna basınca popup şeklinde onay isteyen bir uyarı geliyor onu halledemedim yardımcı olursanız sevinirim.
 
soncizgi yaptığınız programdan yaralanarak öğrencinin nüfus, anne bilgi ve baba bilgilerini mernisten güncelleyip kaydetmek için bir program yaptım. Nüfus kısmı oluyor ancak anne ve baba bilgi günceleme butonuna basınca popup şeklinde onay isteyen bir uyarı geliyor onu halledemedim yardımcı olursanız sevinirim.
Hocam, tıklamayı gerektiren onay butonuna sağ tıklayıp, denetleyi seçin. Açılan kaynak kod satırına da sağ tıklayıp kopyala > Xpath seçeneğini seçin.
Kod:
onayla=browser.find_element_by_xpath('..........')
onayla.click()
..... yazan yere xpath bilgisini yapıştırın. Çalışması lazım. Kolay gelsin.
 
Hocam, tıklamayı gerektiren onay butonuna sağ tıklayıp, denetleyi seçin. Açılan kaynak kod satırına da sağ tıklayıp kopyala > Xpath seçeneğini seçin.
Kod:
onayla=browser.find_element_by_xpath('..........')
onayla.click()
..... yazan yere xpath bilgisini yapıştırın. Çalışması lazım. Kolay gelsin.

Cevap için teşekkür ederim. Ancak çıkan onay web sitesinin mesajı diye çıkıyor. Sağ tıklayınca denetle çıkmıyor sadece tümünü seç çıkıyor.
 

Ekli dosyalar

  • 2021-10-15_093219.jpg
    2021-10-15_093219.jpg
    20.2 KB · Görüntüleme: 15
  • 2021-10-15_093248.jpg
    2021-10-15_093248.jpg
    23.1 KB · Görüntüleme: 17
Hocam, tıklamayı gerektiren onay butonuna sağ tıklayıp, denetleyi seçin. Açılan kaynak kod satırına da sağ tıklayıp kopyala > Xpath seçeneğini seçin.
Kod:
onayla=browser.find_element_by_xpath('..........')
onayla.click()
..... yazan yere xpath bilgisini yapıştırın. Çalışması lazım. Kolay gelsin.
Tamam buldum. Teşekkürler
 
Login işlemini yaptım ama bu ekranda click olayı çalışmıyor.
Linkbuttonun xpath ini şu şekilde yaptım.
from selenium import webdriver
import time

driver = webdriver.Chrome("chromedriver.exe")

url = "https://mebbis.meb.gov.tr/"

driver.get(url)

# Login işlemi
driver.find_element_by_id("txtKullaniciAd").send_keys("kullanıcıadı")
driver.find_element_by_id("txtSifre").send_keys("parola")

driver.find_element_by_id("btnGiris").click() # Burası tamam login oldu ve fotodaki sayfa açıldı.
time.sleep(3)

# eokul link buttonunun xpath ini buldum.Ama tıklama olayında aşağıdaki hatayı alıyorum.
eokul=driver.find_element_by_xpath('//*[@id="rptProjeler_ctl01_rptKullanicilar_ctl00_LinkButton1"]')
eokul.click()


selenium.common.exceptions.WebDriverException: Message: unknown error: Element <a onclick="SetTarget('E-OKUL');" id="rptProjeler_ctl01_rptKullanicilar_ctl00_LinkButton1" title="E-OKUL-..." href="javascript:__doPostBack('rptProjeler$ctl01$rptKullanicilar$ctl00$LinkButton1','')">TC Kimlik</a> is not clickable at point (616, 336). Other element would receive the click: <img class=" img-fluid" src="images/uygulamaikon/e-okul.png" alt="card image">
 

Ekli dosyalar

  • Ekran görüntüsü 2021-10-15 120219.png
    Ekran görüntüsü 2021-10-15 120219.png
    274.5 KB · Görüntüleme: 21
soncizgi yaptığınız programdan yaralanarak öğrencinin nüfus, anne bilgi ve baba bilgilerini mernisten güncelleyip kaydetmek için bir program yaptım. Nüfus kısmı oluyor ancak anne ve baba bilgi günceleme butonuna basınca popup şeklinde onay isteyen bir uyarı geliyor onu halledemedim yardımcı olursanız sevinirim.

Youtube da excel ve selenium konularında videolar yayınlayan Code plus adlı kullanıcının videolarından yararlandım. Call SendKeys("~", thrue) komutu ile hallettim.

Declare PtrSafe Function SetCursorPos Lib "User32" (ByVal x As Long, ByVal y As Long) As LongPtr
Declare PtrSafe Sub mouse_event Lib "User32" (ByVal dwflag As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButton As Long, ByVal dextrainfo As Long)
Public Const MOUSEEVETF_RIGHTDOWN = &H2
Public Const MOUSEEVETF_RIGHTUP = &H4
Sub BASLAT_Click()
Dim baglan As New Selenium.WebDriver, element As WebElement, sec As SelectElement, resim As Selenium.Image, anapencere As Selenium.Window
baglan.Start "chrome"
baglan.Get "https://mebbis.meb.gov.tr/index.aspx"
baglan.Window.Maximize
baglan.FindElementById("txtKullaniciAd").SendKeys Range("k1").Text
baglan.FindElementById("txtSifre").SendKeys Range("l1").Text
baglan.FindElementById("btnGiris").Click
baglan.Wait 1000
baglan.FindElementByXPath("/html/body/form/section/div/div/div[2]").Click
baglan.Wait 1000
baglan.FindElementByXPath("/html/body/form/div[8]/div/div/div[2]/ul/li[1]/a").Click
baglan.Wait 1000
baglan.Get "https://e-okul.meb.gov.tr/IlkOgretim/OGR/IOG01001.aspx"
baglan.Wait 1000
baglan.SwitchToNextWindow
baglan.Wait 1000
baglan.SwitchToPreviousWindow
baglan.Wait 1000
On Error Resume Next
Dim i As Integer
For i = 2 To 1100
If Cells(i, 4) <> "" Then
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[1]/div/div/table/tbody/tr[3]/td/table/tbody/tr[3]/td/input[1]").SendKeys Cells(i, 4).Value
baglan.SendKeys baglan.Keys.Enter
baglan.Get "https://e-okul.meb.gov.tr/IlkOgretim/OGR/iog02003.aspx"
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[3]/td/p/table/tbody/tr[3]/td[4]/input").Clear
baglan.Wait 500
'Nüfus Bilgileri Güncelleme
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[1]/td/div/table/tbody/tr/td[1]/table/tbody/tr/td[10]/img").Click
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[1]/td/div/table/tbody/tr/td[1]/table/tbody/tr/td[4]/img").Click
' Baba Bilgileri Güncelleme
baglan.Get "https://e-okul.meb.gov.tr/IlkOgretim/OGR/iog02005.aspx"
baglan.Wait 500
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[1]/td/div/table/tbody/tr/td[1]/table/tbody/tr/td[10]/img").Click
baglan.Wait 2000
Call SendKeys("~", thrue)
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[1]/td/div/table/tbody/tr/td[1]/table/tbody/tr/td[4]/img").Click
' Anne Bilgileri Güncelleme
baglan.Get "https://e-okul.meb.gov.tr/IlkOgretim/OGR/iog02006.aspx"
baglan.Wait 500
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[1]/td/div/table/tbody/tr/td[1]/table/tbody/tr/td[10]/img").Click
baglan.Wait 2000
Call SendKeys("~", thrue)
baglan.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[1]/td/div/table/tbody/tr/td[1]/table/tbody/tr/td[4]/img").Click
Else
MsgBox ("işlem bitti"), vbInformation, vbOKOnly
End
End If
Cells(i, 8).Value = "işlendi"
Next i
End Sub
 
Arkadaşların belki bazılarının faydası diye açıklamaları paylaşıyorum.
Diyelim 5a sınıfının fotolarını çekme düzenlemesini yapın.
Yapmanız gereken
1- Fotoların dosya adları öğrenci noları kullanmalısınız.
2- Sınıf adının bulunduğu seçme klasörlerini indeksini buldukları ayarlar.
Gerisini sizin yerine kodlar hallediyor. Bugün 2. sınıfın fotoları için test yaptırdım. Sorun yaşamadı.
Kod:
selenyum içe aktarma web sürücüsünden
selenium.webdriver.support.ui'den import Seç
selenium.common.exceptions'tan NoSuchElementException'ı içe aktarın
ithalat zamanı
işletim sistemini içe aktar
#Eleman kontrol
def kontrol_xpath(Sürücü: web sürücüsü,xpath):
    denemek:
        Driver.find_element_by_xpath(xpath)
    NoSuchElementException hariç:
        yanlış dönüş
    dönüş Doğru

tarayıcı=webdriver.Firefox(executable_path=r'D:\python\geckodriver.exe')

browser.get("https://e-okul.meb.gov.tr/")

girisYap=browser.find_element_by_xpath('/html/body/form/section[1]/div/div/a[1]/img')
girisYap.click()

user=browser.find_element_by_name('txtKullaniciAd')
sifre=browser.find_element_by_name('txtSifre')
user.send_keys('kullanıcı adınız...')
sifre.send_keys('şifreniz....')
zaman.uyku(5)
girisYap=browser.find_element_by_xpath('//*[@id="btnEokulGiris"]')
girisYap.click()

kurum=browser.find_element_by_xpath('/html/body/form/nav/div/div/ul[1]/li[2]/a/span[2]')
kurum.tıklayın()


resim=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[1]/div/div/table/tbody/tr/td/table[4]/tbody/ tr[3]/td/tablo[1]/tbody/tr/td')
resim.tıkla()

resekle=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[1]/div/div/table/tbody/tr/td/table[4]/tbody/ tr[3]/td/tablo[2]/tbody/tr[1]/td[2]')
resekle.click()

# 5. Sınıf (Yabancı Dil Ağırlıklı) / D Şubesi
#Tümü

#//*[@id="ddlSinifiSubesi"]
# Seçeneğin kimliğini bulun
sinif = browser.find_element_by_id('ddlSinifiSubesi')
bırak = Seç(sinif)
# Seçilen sınıfın index'i yazılacak
#İlk eleman 0 dan başlıyor.
drop.select_by_index(10)

#//*[@id="ddlResimDurumları"]
rsm = browser.find_element_by_id('ddlResimDurumlari')
drop2 = Seç(rsm)
# Dizine göre seç
drop2.select_by_index(1)

listele=browser.find_element_by_xpath('//*[@id="btnListele"]')
listele.tıkla()

bak=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[5]/td/table/tbody/tr[2] /td/tablo/tbody/tr/td/tablo/tbody/tr[2]/td[1]/a/img')
bak.tıkla()
zaman.uyku(2)
#Sınıf kişi sayısı bulunyor
sayi=browser.find_element_by_xpath('//*[@id="lblKayitSayisi"]').text
#Tıklanan çocuğu okul nosu alınıyor
ogrno=browser.find_element_by_id('txtOkulNo').get_attribute('değer')

if os.path.exists('5k\\'+str(ogrno)+'.jpg'):
    sec=browser.find_element_by_id('flResimSec').send_keys('D:\\python\\eokul-foto-yukle\\5k\\'+ogrno+'.jpg')
    zaman.uyku(2)
    kaydetti=browser.find_element_by_xpath('//*[@id="IOMToolbarActive1_kaydet_b"]/img')
    kaydet.tıkla()

tt=sayi.split(' ')
#Toplam kişi sayısı alınıyor...
tpl=int(tt[0])

aralıktaki x için(3,tpl+2):
    bak=browser.find_element_by_xpath('/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[7]/td/table/tbody/tr[2] /td/table/tbody/tr/td/table/tbody/tr['+str(x)+']/td[1]/a/img')
    bak.tıkla()
    ogrno=browser.find_element_by_id('txtOkulNo').get_attribute('değer')
    if os.path.exists('5k\\'+ogrno+'.jpg'):
        sec=browser.find_element_by_id('flResimSec').send_keys('D:\\python\\eokul-foto-yukle\\5k\\'+ogrno+'.jpg')
        zaman.uyku(3)
        kaydetti=browser.find_element_by_xpath('//*[@id="IOMToolbarActive1_kaydet_b"]/img')
        kaydet.tıkla()
    başka:
        print(ogrno,'Foto yok!')
[/KOD]
[/QUOTE]
Değerli çalışmanız için teşekkürler. bu e okulda hızlı resim ekleden işlem yapıyorsa eğer hızlı resim ekle yapı değiştirdi. resimler filan komple değişmiş bir bakarmısınız acaba 2022 aralık ayı itibari ile geçerliliği var mı? şimdiden teşekkürler.
 
Geri
Üst