• 30-03-2024, 02:21:39
    #1
    merhaba xpathleri yazarken zorlanıyorsanız bu yazdıgım küçük kod ile xpathleri daha kolay yazabileceksiniz. örnek aşğıda

    xpath_finder.py dosyası oluştur bunu içnie dahil et
    # kolay xpath bulma
    def xpath_bul(tag_ismi,text_degeri,ne_yapsın,driver,By):
        xpath_ara = driver.find_element(By.XPATH, f"//{tag_ismi}[text()='{text_degeri}']")
        if ne_yapsın == "click":
            xpath_ara.click()
            return xpath_ara
        elif ne_yapsın == "get":
            return xpath_ara
        else:
            return "hiç bişey yapılmadı"
    #kolay css selector bulma
    def selector_bul(data_anahtar,data_text,ne_yapsın,driver,By):
        element = driver.find_element(By.CSS_SELECTOR, f"[{data_anahtar}='{data_text}']")
        if ne_yapsın == "click":
            element.click()
            return element
        elif ne_yapsın == "get":
            return element
        else:
            return "hiç bişey yapılmadı"

    main.py çalişma dosyasınıza üsteki xpath_finder.py import edelim ve kullanalım
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from xpath_finder import xpath_bul , selector_bul
    # WebDriver'ı başlat
    driver = webdriver.Chrome()
    
    # örnek  bulunacak xpath  text değeri.. ve click örnekleri.
    bulunan_div_xpath = xpath_bul("div","Çıkış Yap","click",driver,By)
    bulunan_span_xpath = xpath_bul("span","Çıkış Yap", "get",driver,By).text
    bulunan_img_xpath = xpath_bul("img","Çıkış Yap","click",driver,By)
    bulunan_button_xpath = xpath_bul("button","Çıkış Yap","click",driver,By)
    
    #kolay css_selector bul...
    bulunan_button_selector = selector_bul("data-clipboard-target","#email", "click",driver,By)
  • 30-03-2024, 02:38:18
    #2
    Bence bu formatı genelde kullanmak pek makul olmuyor büyük sitelerde evet işe yarıyabiliyor ama genelde siteler uniq yapmadıkları için butonları ve texttleri Benzer olduğu için formatları 1 iteme tıklamya gidiyor ama aslında sizin tıklamak istediğiniz 2 item oluyor o zaman bu fonksiyon a ekleme yapmak vs gerekiyor iş uzuyor lakin gene de güzel paylaşım teşekkürler
  • 30-03-2024, 16:03:00
    #3
    f"//{tag_ismi}[text()='{text_degeri}']" ifadesi her zaman çalışmayabilir. Html tagleri arasında metnin etrafında boşluklar olabilir. Onun yerine f"//{tag_ismi}[contains(text(), '{text_degeri}')]" daha sağlıklı olur.

    Ama şahsen ben böyle bir yola başvurmazdım. Çünkü zaten basit olan bir şeyi boşuna karmaşıklaştırmaya ya da kısıtlamaya neden gerek duyalım ki? Onun yerine xpath'i nerelerde ve nasıl kullanabileceğini öğrenmek daha faydalı olur. Burası da referans almak için tavsiye edebileceğim sade ve anlaşılır bir kaynak. Paylaşım için teşekkürler.
  • 30-03-2024, 16:24:16
    #4
    ethmtrgt adlı üyeden alıntı: mesajı görüntüle
    f"//{tag_ismi}[text()='{text_degeri}']" ifadesi her zaman çalışmayabilir. Html tagleri arasında metnin etrafında boşluklar olabilir. Onun yerine f"//{tag_ismi}[contains(text(), '{text_degeri}')]" daha sağlıklı olur.

    Ama şahsen ben böyle bir yola başvurmazdım. Çünkü zaten basit olan bir şeyi boşuna karmaşıklaştırmaya ya da kısıtlamaya neden gerek duyalım ki? Onun yerine xpath'i nerelerde ve nasıl kullanabileceğini öğrenmek daha faydalı olur. Burası da referans almak için tavsiye edebileceğim sade ve anlaşılır bir kaynak. Paylaşım için teşekkürler.
    neden kısıtlama olsun hocam koda kısıtlama yoktur bu arada geniş kullanıma mevcuttur.