• 20-10-2024, 01:09:17
    #1
    merhaba arkadaşlar kendi projelerimde kullandıgımda basitleştirilmiş örnek basit bir kütüphane paylaşmak istedim xpath ararken zorlanmamak için sizler için basitleştirlmiş versiyununu paylaşiyorum.

    seleniumBasic.py :
    class SeleniumBasic:
        # Bu fonksiyon, belirli bir metni içeren <button> (buton) HTML elementini bulmak için kullanılır.
        # Örneğin, sayfadaki bir buton üzerinde "Giriş Yap" yazıyorsa, bu butonu bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.button_text("Giriş Yap"))
        @staticmethod
        def button_text(text):
            return f"//button[text()='{text}']"
        
        # Bu fonksiyon, belirli bir class ismini içeren <button> elementini bulmak için kullanılır.
        # Örneğin, "btn-primary" class'ına sahip bir butonu bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.button_class("btn-primary"))
        @staticmethod
        def button_class(class_name):
            return f"//button[contains(@class, '{class_name}')]"
        
        # Bu fonksiyon, belirli bir metni içeren <span> HTML elementini bulmak için kullanılır.
        # Örneğin, bir <span> etiketi içinde "Hoşgeldiniz" yazısı varsa, bu elementi bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.span_text("Hoşgeldiniz"))
        @staticmethod
        def span_text(text):
            return f"//span[text()='{text}']"
        
        # Bu fonksiyon, belirli bir class ismine sahip <span> HTML elementini bulmak için kullanılır.
        # Örneğin, "highlight" class'ına sahip bir <span> etiketini bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.span_class("highlight"))
        @staticmethod
        def span_class(class_name):
            return f"//span[contains(@class, '{class_name}')]"
        
        # Bu fonksiyon, belirli bir metni içeren <div> HTML elementini bulmak için kullanılır.
        # Örneğin, "Bu bir duyurudur" yazısını içeren bir <div> bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.div_text("Bu bir duyurudur"))
        @staticmethod
        def div_text(text):
            return f"//div[text()='{text}']"
        
        # Bu fonksiyon, belirli bir class ismini içeren <div> HTML elementini bulmak için kullanılır.
        # Örneğin, "container" class'ına sahip bir <div> elementini bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.div_class("container"))
        @staticmethod
        def div_class(class_name):
            return f"//div[contains(@class, '{class_name}')]"
        
        # Bu fonksiyon, belirli bir placeholder (yer tutucu) özelliğine sahip bir <input> elementini bulmak için kullanılır.
        # Örneğin, "Kullanıcı Adı" placeholder değerine sahip bir input kutusunu bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.input_placeholder("Kullanıcı Adı"))
        @staticmethod
        def input_placeholder(placeholder):
            return f"//input[@placeholder='{placeholder}']"
        
        # Bu fonksiyon, belirli bir name (isim) özelliğine sahip bir <input> elementini bulmak için kullanılır.
        # Örneğin, "username" isminde bir input alanını bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.input_name("username"))
        @staticmethod
        def input_name(name):
            return f"//input[@name='{name}']"
        
        # Bu fonksiyon, belirli bir type (tip) özelliğine sahip bir <input> elementini bulmak için kullanılır.
        # Örneğin, bir şifre alanını bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.input_type("password"))
        @staticmethod
        def input_type(type_):
            return f"//input[@type='{type_}']"
        
        # Bu fonksiyon, belirli bir id özelliğine sahip bir <input> elementini bulmak için kullanılır.
        # Örneğin, "email_input" id'sine sahip bir input kutusunu bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.input_id("email_input"))
        @staticmethod
        def input_id(input_id):
            return f"//input[@id='{input_id}']"
        
        # Bu fonksiyon, belirli bir metni içeren bir <a> (bağlantı) elementini bulmak için kullanılır.
        # Örneğin, "Anasayfa" yazısına sahip bir linki bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.link_text("Anasayfa"))
        @staticmethod
        def link_text(text):
            return f"//a[text()='{text}']"
        
        # Bu fonksiyon, belirli bir href (bağlantı adresi) özelliğine sahip bir <a> (bağlantı) elementini bulmak için kullanılır.
        # Örneğin, "/iletisim" adresine yönlendiren bir bağlantıyı bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.link_href("/iletisim"))
        @staticmethod
        def link_href(href):
            return f"//a[@href='{href}']"
        
        # Bu fonksiyon, belirli bir metni içeren bir <p> (paragraf) elementini bulmak için kullanılır.
        # Örneğin, "Bu bir örnek metindir." içeren bir paragrafı bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.paragraph_text("Bu bir örnek metindir."))
        @staticmethod
        def paragraph_text(text):
            return f"//p[text()='{text}']"
        
        # Bu fonksiyon, belirli bir başlık seviyesine (h1, h2, h3 vb.) ve metne sahip bir başlık (heading) elementini bulmak için kullanılır.
        # Örneğin, h2 seviyesinde "Ürünlerimiz" yazısına sahip bir başlığı bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.heading_text(2, "Ürünlerimiz"))
        @staticmethod
        def heading_text(level, text):
            return f"//h{level}[text()='{text}']"
        
        # Bu fonksiyon, belirli bir alt metnine (alt attribute) sahip bir <img> (resim) elementini bulmak için kullanılır.
        # Örneğin, "Logo" alt metnine sahip bir resmi bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.img_alt("Logo"))
        @staticmethod
        def img_alt(alt_text):
            return f"//img[@alt='{alt_text}']"
        
        # Bu fonksiyon, belirli bir kaynak (src) adresine sahip bir <img> (resim) elementini bulmak için kullanılır.
        # Örneğin, "/resimler/logo.png" adresindeki bir resmi bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.img_src("/resimler/logo.png"))
        @staticmethod
        def img_src(src):
            return f"//img[@src='{src}']"
        
        # Bu fonksiyon, belirli bir değere sahip <option> elementini bulmak için kullanılır.
        # Örneğin, "tr" değerine sahip bir <option> elementini bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.select_option("tr"))
        @staticmethod
        def select_option(value):
            return f"//select/option[@value='{value}']"
        
        # Bu fonksiyon, belirli bir name (isim) özelliğine sahip <select> elementini bulmak için kullanılır.
        # Örneğin, "ülke" ismindeki bir dropdown menüsünü bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.select_name("ülke"))
        @staticmethod
        def select_name(name):
            return f"//select[@name='{name}']"
        
        # Bu fonksiyon, belirli bir name (isim) özelliğine sahip checkbox (onay kutusu) elementini bulmak için kullanılır.
        # Örneğin, "sozlesme" isminde bir onay kutusunu bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.checkbox_name("sozlesme"))
        @staticmethod
        def checkbox_name(name):
            return f"//input[@type='checkbox' and @name='{name}']"
        
        # Bu fonksiyon, belirli bir name (isim) özelliğine sahip radio button (seçim kutusu) elementini bulmak için kullanılır.
        # Örneğin, "cinsiyet" isminde bir radio button'ı bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.radio_name("cinsiyet"))
        @staticmethod
        def radio_name(name):
            return f"//input[@type='radio' and @name='{name}']"
        
        # Bu fonksiyon, belirtilen HTML etiketi, özellik adı ve değerine sahip bir elementi bulmak için kullanılır.
        # Örneğin, "id" özelliği "menu" olan bir <div> elementini bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.attribute_value("div", "id", "menu"))
        @staticmethod
        def attribute_value(tag, attribute, value):
            return f"//{tag}[@{attribute}='{value}']"
        
        # Bu fonksiyon, belirli bir class ismini içeren herhangi bir HTML elementini bulmak için kullanılır.
        # Örneğin, "navbar" class'ına sahip herhangi bir elementi bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.class_name("navbar"))
        @staticmethod
        def class_name(class_name):
            return f"//*[contains(@class, '{class_name}')]"
        
        # Bu fonksiyon, belirli bir data-attribute (veri özelliği) ve değerine sahip bir elementi bulmak için kullanılır.
        # Örneğin, "data-id" özelliği "123" olan bir elementi bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.data_attribute("id", "123"))
        @staticmethod
        def data_attribute(data_attribute, value):
            return f"//*[@data-{data_attribute}='{value}']"
        
        # Bu fonksiyon, belirli bir title (başlık) özelliğine sahip bir elementi bulmak için kullanılır.
        # Örneğin, title özelliği "Kullanıcı Profil" olan bir elementi bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.title_attribute("Kullanıcı Profil"))
        @staticmethod
        def title_attribute(title):
            return f"//*[@title='{title}']"
        
        # Bu fonksiyon, belirli bir aria-label özelliğine sahip bir elementi bulmak için kullanılır.
        # Örneğin, "Giriş Yap" aria-label'ına sahip bir butonu bulmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.aria_label("Giriş Yap"))
        @staticmethod
        def aria_label(label):
            return f"//*[@aria-label='{label}']"
        
        # Bu fonksiyon, kullanıcı tarafından özel olarak belirtilen bir XPath ifadesini kullanmak için kullanılır.
        # Örneğin, özel bir XPath ifadesini doğrudan çalıştırmak için:
        # driver.find_element(By.XPATH, SeleniumBasic.custom_xpath("//div[@id='menu']"))
        @staticmethod
        def custom_xpath(xpath):
            return xpath
    
        # Bu fonksiyon, verilen XPath ile bir iframe içerisine geçiş yapmak için kullanılır.
        # Örneğin, //iframe[@id='frame1'] XPath'ine sahip bir iframe'e geçiş yapmak için:
        # SeleniumBasic.switch_to_iframe_by_xpath(driver, "//iframe[@id='frame1']")
        @staticmethod
        def switch_to_iframe_by_xpath(driver, iframe_xpath):
            iframe = driver.find_element(By.XPATH, iframe_xpath)
            return driver.switch_to.frame(iframe)
    
        # Bu fonksiyon, iframe'den çıkıp ana sayfaya geri dönmek için kullanılır.
        @staticmethod
        def switch_to_default_content(driver):
            return driver.switch_to.default_content()
    Örnek kullanimi

    import seleniumBasic
    
    button_xpath = SeleniumBasic.button_text("KABUL ET")
    button_class_xpath = SeleniumBasic.button_class("btn-primary")
    span_xpath = SeleniumBasic.span_text("Örnek Metin")
    span_class_xpath = SeleniumBasic.span_class("highlight")
    div_xpath = SeleniumBasic.div_text("Başlık")
    div_class_xpath = SeleniumBasic.div_class("container")
    input_placeholder_xpath = SeleniumBasic.input_placeholder("Arama")
    input_name_xpath = SeleniumBasic.input_name("username")
    input_type_xpath = SeleniumBasic.input_type("email")
    input_id_xpath = SeleniumBasic.input_id("password")
    link_xpath = SeleniumBasic.link_text("Buraya Tıklayın")
    link_href_xpath = SeleniumBasic.link_href("https://www.example.com")
    paragraph_xpath = SeleniumBasic.paragraph_text("Bu bir paragraf.")
    heading_xpath = SeleniumBasic.heading_text(2, "Başlık 2")
    img_alt_xpath = SeleniumBasic.img_alt("Resim Açıklaması")
    img_src_xpath = SeleniumBasic.img_src("resim.jpg")
    select_option_xpath = SeleniumBasic.select_option("option1")
    select_name_xpath = SeleniumBasic.select_name("select1")
    checkbox_name_xpath = SeleniumBasic.checkbox_name("subscribe")
    radio_name_xpath = SeleniumBasic.radio_name("gender")
    attribute_xpath = SeleniumBasic.attribute_value("div", "class", "container")
    class_name_xpath = SeleniumBasic.class_name("btn");
    data_attr_xpath = SeleniumBasic.data_attribute("custom", "value");
    title_attr_xpath = SeleniumBasic.title_attribute("Başlık");
    aria_label_xpath = SeleniumBasic.aria_label("Yardımcı metin");
    iframe_gecis_xpath = SeleniumBasic.switch_to_iframe_by_xpath(driver,"iframenin xpath kodunu  gir")
    iframeden_cik = SeleniumBasic.switch_to_default_content(driver)
    
    # XPath'leri yazdırma
    print("Button Xpath:", button_xpath)
    print("Button Class Xpath:", button_class_xpath)
    print("Span Xpath:", span_xpath)
    print("Span Class Xpath:", span_class_xpath)
    print("Div Xpath:", div_xpath)
    print("Div Class Xpath:", div_class_xpath)
    print("Input Placeholder Xpath:", input_placeholder_xpath)
    print("Input Name Xpath:", input_name_xpath)
    print("Input Type Xpath:", input_type_xpath)
    print("Input ID Xpath:", input_id_xpath)
    print("Link Xpath:", link_xpath)
    print("Link Href Xpath:", link_href_xpath)
    print("Paragraph Xpath:", paragraph_xpath)
    print("Heading Xpath:", heading_xpath)
    print("Image Alt Xpath:", img_alt_xpath)
    print("Image Src Xpath:", img_src_xpath)
    print("Select Option Xpath:", select_option_xpath)
    print("Select Name Xpath:", select_name_xpath)
    print("Checkbox Name Xpath:", checkbox_name_xpath)
    print("Radio Name Xpath:", radio_name_xpath)
    print("Attribute Value Xpath:", attribute_xpath)
    print("Class Name Xpath:", class_name_xpath)
    print("Data Attribute Xpath:", data_attr_xpath)
    print("Title Attribute Xpath:", title_attr_xpath)
    print("Aria Label Xpath:", aria_label_xpath)
  • 20-10-2024, 01:18:42
    #2
    eline sağlık bilmeyenler için güzel Bence ama aslında kodu biraz açıklayabilirdin en azından neyi niye yaptıklarınıda bilirler arial labeli falan filmeye bilirler veya button text ile span text arasındaki fakrı falan birde bunlara wait ekleyebilirsin atıyorum 10 saniye 5 saniye duruma göre o zaman daha da stabil olur sistemin eline sağlık paylşaım için
  • 20-10-2024, 01:21:14
    #3
    Teşekkürler hocam,sabahleyin deneyeceğim bazı öğeler saklı oluyor umarım onlarda da işe yarıyordur
  • 20-10-2024, 11:26:28
    #4
    Melihhh adlı üyeden alıntı: mesajı görüntüle
    eline sağlık bilmeyenler için güzel Bence ama aslında kodu biraz açıklayabilirdin en azından neyi niye yaptıklarınıda bilirler arial labeli falan filmeye bilirler veya button text ile span text arasındaki fakrı falan birde bunlara wait ekleyebilirsin atıyorum 10 saniye 5 saniye duruma göre o zaman daha da stabil olur sistemin eline sağlık paylşaım için

    ekledim hocam
  • 20-10-2024, 11:26:59
    #5
    soylenmezsmt adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler hocam,sabahleyin deneyeceğim bazı öğeler saklı oluyor umarım onlarda da işe yarıyordur

    hangi sakli olalar yazarsanız dahil edebilriim.
  • 20-10-2024, 11:46:06
    #6
    soylenmezsmt adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler hocam,sabahleyin deneyeceğim bazı öğeler saklı oluyor umarım onlarda da işe yarıyordur
    Saklı değildir ya idleri vs si değişken dinamiktir text ile arilal label ile ypaiblirisn belki de iframe içindedir ondan olabiir saklı diye bir şey yoktur
  • 20-10-2024, 17:25:08
    #7
    shms adlı üyeden alıntı: mesajı görüntüle
    hangi sakli olalar yazarsanız dahil edebilriim.
    Melihhh adlı üyeden alıntı: mesajı görüntüle
    Saklı değildir ya idleri vs si değişken dinamiktir text ile arilal label ile ypaiblirisn belki de iframe içindedir ondan olabiir saklı diye bir şey yoktur
    Hocam YouTube içerisindeki sistemlerde İframe içerisinde oluyor onları iframe içerisinde arasan da tıklayamıyorsun veya çok zor buluyorsun ve bazı ögelere sadece css selector ile tıklanıyor onlar sıkıntı oluyor.
    Örneğin Gizli Sekme açın VPN ile girin youtube.com'a gittiğinizde "Oturum açtığınızı doğrulayın" diye bir popup gibi bir şey açılıyor sayfayı hafif aşşağıya indiriyorsunuz oradaki kabul et yazısı var örneğin o sıkıntı oluyor.Şuanda başka aklıma gelmedi. Teşekkürler
  • 20-10-2024, 17:42:19
    #8
    soylenmezsmt adlı üyeden alıntı: mesajı görüntüle
    Hocam YouTube içerisindeki sistemlerde İframe içerisinde oluyor onları iframe içerisinde arasan da tıklayamıyorsun veya çok zor buluyorsun ve bazı ögelere sadece css selector ile tıklanıyor onlar sıkıntı oluyor.
    Örneğin Gizli Sekme açın VPN ile girin youtube.com'a gittiğinizde "Oturum açtığınızı doğrulayın" diye bir popup gibi bir şey açılıyor sayfayı hafif aşşağıya indiriyorsunuz oradaki kabul et yazısı var örneğin o sıkıntı oluyor.Şuanda başka aklıma gelmedi. Teşekkürler


    iframeler arası geçiş yapabilirsin ve direk istediğin buttona erişebilirsin textinden ulaşman da aslında gayet kolay,
    Popup a gelince aslında önce tarayıcının ekranından açılan popup sayfasına geçmen lazım o popup a geçtikten sonra direk kontrol edebilirsin sonra tekrar selenium page geçmen lazım.
  • 20-10-2024, 19:05:31
    #9
    soylenmezsmt adlı üyeden alıntı: mesajı görüntüle
    Hocam YouTube içerisindeki sistemlerde İframe içerisinde oluyor onları iframe içerisinde arasan da tıklayamıyorsun veya çok zor buluyorsun ve bazı ögelere sadece css selector ile tıklanıyor onlar sıkıntı oluyor.
    Örneğin Gizli Sekme açın VPN ile girin youtube.com'a gittiğinizde "Oturum açtığınızı doğrulayın" diye bir popup gibi bir şey açılıyor sayfayı hafif aşşağıya indiriyorsunuz oradaki kabul et yazısı var örneğin o sıkıntı oluyor.Şuanda başka aklıma gelmedi. Teşekkürler

    küütphaneye dahil ettim hocam