• 06-01-2024, 21:48:11
    #1
    Merhaba arkadaşlar;
    python'da yeniyim ve bir proje üzerinde çalışıyorum.
    selenium ile bir web sitesindeki 3 saniyede yenilenen yüzdelik bir dilimin değerini while döngüsü ile aldım ve ve yüzdeyi her 3 saniyede 1 ekrana yazıdırıyorum.

    Koşullara göre bu yüzdelik değer 50'nin üzerindeyse YUKARI
    Koşullara göre bu yüzdelik değer 50'nin altındaysa AŞAĞI

    şeklinde mysql db'ye post etmem gerekiyor.
    bu veri her 3 saniyede değişebileceğinden sürekli db'ye post etmek yerine değer 50 üzerindeyken 1 kez post etsin değer 50'nin altına düşerse yeniden aşağı değerini post etsin istiyorum.

    Gelelim kafamın karıştığı yere;
    ben if else koşullarını while döngüsü içerisinde yaparsam her seferinde post etmiş olacağım
    dışında alırsam döngü while'de kalıyor if else koşullarına ulaşmıyor.

    bu yapıyı nasıl kurmam gerektiği hakkında bilgilendirebilecek arkadaşlara şimdiden çok teşekkür ederim.

    örnek kod bloğum

    
    from selenium.webdriver.chrome.service import Service
    from selenium import webdriver
    from time import sleep
     
    url = "..........."
    path = "C:\\Users\\Software\\Desktop\\glass\\chromedriver.exe"
     
    service = Service(executable_path=path) # Here
    driver = webdriver.Chrome(service=service) # Here
    driver.get(url)
    driver.implicitly_wait(10)
    driver.execute_script("window.scrollBy(0,1400)","")
    sleep(10)
     
     
    while True:  
        genel_yuzde_Bilgisi = driver.find_element("xpath",'//*[@id="__next"]/div[2]/div[1]/div[2]/div/div[5]/div[1]/div/div[2]/div[2]/div/div[2]/div[1]').text
        
        print(genel_yuzde_Bilgisi)
        sleep(2)
  • 06-01-2024, 21:52:53
    #2
    Değerleri array'a ekleyip array'da kaç değer olduğunda işlem yapmasını istiyorsanız if koşulunu buna göre yapılandırın. Mysql işlemi sonrası array'ı sıfırlayın.
  • 06-01-2024, 21:55:19
    #3
    Profesör adlı üyeden alıntı: mesajı görüntüle
    Değerleri array'a ekleyip array'da kaç değer olduğunda işlem yapmasını istiyorsanız if koşulunu buna göre yapılandırın. Mysql işlemi sonrası array'ı sıfırlayın.
    if array içerisinde mi koşul kontrolü yapacak yoksa array if ya da else koşulunun içerisinde mi işlem yapacak?
  • 06-01-2024, 21:58:20
    #4
    Arifap adlı üyeden alıntı: mesajı görüntüle
    if array içerisinde mi koşul kontrolü yapacak yoksa array if ya da else koşulunun içerisinde mi işlem yapacak?
    genel_yuzde_Bilgisi adlı değişkeni aldıktan sonra array'a ekleyin. Bu kod satırının altına array'daki değişken sayısını kontrol edecek bir if ekleyin else diye ayırmanıza gerek yok.
    Örneğin 50 değişken biriktiğinde mysql'e güncelletmek istiyorsanız if( array.count (x) == 50 ) bu şekilde bir if koşulu oluşturup bu if içerisinde mysql işlemini yapın.
    Mysql işlemini yaptıktan sonra aynı if koşulu içerisinde x.clear() yapıp array'ı sıfırlayın.
  • 06-01-2024, 22:05:38
    #5
    Profesör adlı üyeden alıntı: mesajı görüntüle
    genel_yuzde_Bilgisi adlı değişkeni aldıktan sonra array'a ekleyin. Bu kod satırının altına array'daki değişken sayısını kontrol edecek bir if ekleyin else diye ayırmanıza gerek yok.
    Örneğin 50 değişken biriktiğinde mysql'e güncelletmek istiyorsanız if( array.count (x) == 50 ) bu şekilde bir if koşulu oluşturup bu if içerisinde mysql işlemini yapın.
    Mysql işlemini yaptıktan sonra aynı if koşulu içerisinde x.clear() yapıp array'ı sıfırlayın.
    belirli bir biriktirme değil de oran 50 üzerindeyse her seferinde yeniden yazması yerine 50 üzerindeyse 1 kez post edip kalsın (koşul karşılanıyorsa)
    50 değerinden düşerse o şartla (düştü) olarak post etsin. belki 1000 tane yukarı gelecek belki her 2 saniyede bir yukarı aşağı yukarı aşağı gelecek. Kafamda bi oturtamadım olayı.
  • 07-01-2024, 16:12:35
    #6
    Şöyle bir şey işini görebilir zannedersem :

    aboveOrEqualTo50 = False
    loopStart = True
    while True:  
        genel_yuzde_Bilgisi = float(driver.find_element("xpath",'//*[@id="__next"]/div[2]/div[1]/div[2]/div/div[5]/div[1]/div/div[2]/div[2]/div/div[2]/div[1]').text)
        if(loopStart):
            if(genel_yuzde_Bilgisi >= 50) :
                aboveOrEqualTo50 = True
            else:
                aboveOrEqualTo50 = False
            loopStart = False
            SaveToDatabase(genel_yuzde_Bilgisi)
        elif((aboveOrEqualTo50 and genel_yuzde_Bilgisi < 50) or (not aboveOrEqualTo50 and genel_yuzde_Bilgisi >= 50)):
            aboveOrEqualTo50 = not aboveOrEqualTo50
            SaveToDatabase(genel_yuzde_Bilgisi)
        sleep(2)
  • 07-01-2024, 16:29:00
    #7
    VEDANTA adlı üyeden alıntı: mesajı görüntüle
    Şöyle bir şey işini görebilir zannedersem :

    aboveOrEqualTo50 = False
    loopStart = True
    while True:  
        genel_yuzde_Bilgisi = float(driver.find_element("xpath",'//*[@id="__next"]/div[2]/div[1]/div[2]/div/div[5]/div[1]/div/div[2]/div[2]/div/div[2]/div[1]').text)
        if(loopStart):
            if(genel_yuzde_Bilgisi >= 50) :
                aboveOrEqualTo50 = True
            else:
                aboveOrEqualTo50 = False
            loopStart = False
            SaveToDatabase(genel_yuzde_Bilgisi)
        elif((aboveOrEqualTo50 and genel_yuzde_Bilgisi < 50) or (not aboveOrEqualTo50 and genel_yuzde_Bilgisi >= 50)):
            aboveOrEqualTo50 = not aboveOrEqualTo50
            SaveToDatabase(genel_yuzde_Bilgisi)
        sleep(2)
    akşam deneyeceğim çok teşekkür ederim.
  • 08-01-2024, 16:59:22
    #8
    from selenium.webdriver.chrome.service import Service
    from selenium import webdriver
    from time import sleep
    
    # Veritabanına post etme fonksiyonu
    def post_et(deger):
        # Burada MySQL veritabanına post etme işlemi yapılabilir
        print(f"Veri post edildi: {deger}")
    
    url = "..........."
    path = "C:\\Users\\Software\\Desktop\\glass\\chromedriver.exe"
    
    service = Service(executable_path=path)
    driver = webdriver.Chrome(service=service)
    driver.get(url)
    driver.implicitly_wait(10)
    driver.execute_script("window.scrollBy(0,1400)","")
    sleep(10)
    
    onceki_durum = None  # Önceki durumu saklamak için bir değişken tanımla
    
    while True:
        genel_yuzde_Bilgisi = driver.find_element("xpath",'//*[@id="__next"]/div[2]/div[1]/div[2]/div/div[5]/div[1]/div/div[2]/div[2]/div/div[2]/div[1]').text
    
        print(genel_yuzde_Bilgisi)
        
        # Yüzde değeri 50'nin üzerindeyse veya altındaysa ve önceki durum değiştiyse post et
        if (genel_yuzde_Bilgisi > '50' and onceki_durum != 'YUKARI') or (genel_yuzde_Bilgisi <= '50' and onceki_durum != 'ASAGI'):
            if genel_yuzde_Bilgisi > '50':
                post_et('YUKARI')
                onceki_durum = 'YUKARI'
            else:
                post_et('ASAGI')
                onceki_durum = 'ASAGI'
        
        sleep(3)