Python ile bot yazımı yapıyorsanız, selenium ile yapmasını isteyin. Ayrıca hangi veriyi nereden alacağını da ona mutlaka söyleyin.

Örneğin hepsiburada.com ürün sayfasından ürün verilerini çekerken, ürün adına sağ tıklayıp, incele deyin. Sonra sağda bir bölüm açılacak, buradan ürün adının metin halini bulup sağ tıklayın, kopyalanın altında xpath'ı kopyala olmalı. Benim tarayıcı İngilizce olduğundan aşağıdaki şekilde görünüyor. Ürün adını bu xpath ile alabileceğini söyleyin.



Örnek bot prompt:

Hepsiburada ürün url'sinden ürün bilgilerini ekrana yazdıran bir python betik yaz. Selenium kullan.

Alman gereken verileri xpath olarak aşağıya ekledim:
Ürün adı: //*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[1]/div[1]/h1/text()
Marka: //*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[1]/div[1]/h1/a
Satıcı: //*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[2]/div[1]/a/span
Fiyat: //*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[3]/div/div[1]/div[1]/span/text()[1]
Örnek kod:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException, TimeoutException
def get_hepsiburada_product_info(url):
    """
    Verilen Hepsiburada ürün URL'sinden ürün bilgilerini çeker.
    Args:
        url (str): Hepsiburada ürün sayfası URL'si.
    Returns:
        dict: Ürün bilgilerini içeren bir sözlük (product_name, brand, seller, price)
              veya bir hata oluşursa None.
    """
    product_info = {
        "product_name": None,
        "brand": None,
        "seller": None,
        "price": None,
        "url": url
    }
    # XPath'ler (Kullanıcı tarafından sağlananlar)
    # Not: XPath'ler zamanla değişebilir!
    xpath_product_name_h1 = '//*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[1]/div[1]/h1'
    xpath_brand_link = '//*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[1]/div[1]/h1/a'
    xpath_seller = '//*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[2]/div[1]/a/span'
    # Fiyat XPath'i için genellikle ana fiyat konteynerini hedeflemek daha güvenilirdir.
    # Kullanıcının verdiği XPath'deki span'ı hedefleyelim:
    xpath_price_span = '//*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[3]/div/div[1]/div[1]/span'
    # --- WebDriver Kurulumu ---
    options = webdriver.ChromeOptions()
    # options.add_argument('--headless')  # Tarayıcıyı arka planda çalıştırmak için
    # options.add_argument('--disable-gpu') # Headless mod için bazen gerekli
    options.add_argument('--start-maximized') # Tam ekran başlatma
    options.add_argument('--log-level=3') # Konsola daha az Selenium logu basması için
    options.add_experimental_option('excludeSwitches', ['enable-logging']) # Konsoldaki Device Rtc.. logunu gizler
    driver = None # Hata durumunda quit() çağrılabilmesi için başta None atayalım
    try:
        print("WebDriver başlatılıyor...")
        service = Service(ChromeDriverManager().install())
        driver = webdriver.Chrome(service=service, options=options)
        print(f"Sayfa yükleniyor: {url}")
        driver.get(url)
        # Sayfanın yüklenmesi için bekleme süresi (gerekirse artırılabilir)
        wait = WebDriverWait(driver, 15) # 15 saniye kadar bekle
        print("Ürün bilgileri çekiliyor...")
        # --- Veri Çekme ---
        # Marka (Genellikle H1 içindeki link)
        try:
            brand_element = wait.until(EC.presence_of_element_located((By.XPATH, xpath_brand_link)))
            product_info["brand"] = brand_element.text.strip()
        except (NoSuchElementException, TimeoutException):
            print(f"Uyarı: Marka bulunamadı (XPath: {xpath_brand_link})")
        except Exception as e:
             print(f"Marka çekilirken beklenmedik hata: {e}")
        # Ürün Adı (H1 elementinin tamamı - Markayı daha sonra çıkarmayı deneyebiliriz)
        try:
            # H1 elementinin görünür olmasını bekleyelim
            h1_element = wait.until(EC.visibility_of_element_located((By.XPATH, xpath_product_name_h1)))
            full_name = h1_element.text.strip()
            # Eğer marka bulunduysa ve isim markayla başlıyorsa, markayı çıkar
            if product_info["brand"] and full_name.startswith(product_info["brand"]):
                product_info["product_name"] = full_name[len(product_info["brand"]):].strip()
            else:
                 product_info["product_name"] = full_name # Marka yoksa veya başta değilse, tam ismi al
        except (NoSuchElementException, TimeoutException):
            print(f"Uyarı: Ürün adı (H1) bulunamadı (XPath: {xpath_product_name_h1})")
        except Exception as e:
             print(f"Ürün adı çekilirken beklenmedik hata: {e}")

        # Satıcı
        try:
            seller_element = wait.until(EC.presence_of_element_located((By.XPATH, xpath_seller)))
            product_info["seller"] = seller_element.text.strip()
        except (NoSuchElementException, TimeoutException):
            # Bazen satıcı farklı bir yapıda olabilir, alternatif kontrol edilebilir.
            # Örnek: Satıcı Hepsiburada ise link olmayabilir.
            try:
                 # Alternatif XPath (Satıcı Hepsiburada olduğunda link olmayabilir)
                 xpath_seller_alt = '//*[@id="container"]/div/main/div/div/div[2]/section[1]/div[2]/div[2]/div[1]/span[2]'
                 seller_element = wait.until(EC.presence_of_element_located((By.XPATH, xpath_seller_alt)))
                 product_info["seller"] = seller_element.text.strip()
            except (NoSuchElementException, TimeoutException):
                 print(f"Uyarı: Satıcı bulunamadı (XPathler: {xpath_seller}, {xpath_seller_alt})")
            except Exception as e_alt:
                 print(f"Alternatif satıcı çekilirken beklenmedik hata: {e_alt}")
        except Exception as e:
             print(f"Satıcı çekilirken beklenmedik hata: {e}")
        # Fiyat
        try:
             # Fiyat elementinin içeriği değişebileceği için görünür olmasını beklemek daha iyi
            price_element = wait.until(EC.visibility_of_element_located((By.XPATH, xpath_price_span)))
            # Bazen fiyat birden fazla span içinde veya text node'larında olabilir.
            # Sadece elementin text'ini almak genellikle işe yarar.
            product_info["price"] = price_element.text.strip()
            # Eğer fiyat boşsa veya sadece 'TL' gibi bir şeyse, içindeki diğer elementleri kontrol et
            if not product_info["price"] or product_info["price"].lower() == "tl":
                 # Fiyat genellikle 'data-bind' veya script içinde de olabilir,
                 # ancak XPath ile almak daha basit. İç içe span'leri deneyelim.
                 try:
                      # Fiyat genellikle bu span içindeki başka bir yerde olabilir
                      actual_price = driver.execute_script("return arguments[0].innerText;", price_element)
                      product_info["price"] = actual_price.strip() if actual_price else None
                 except Exception as inner_e:
                      print(f"Fiyat içeriği alınırken ek hata: {inner_e}")
        except (NoSuchElementException, TimeoutException):
            print(f"Uyarı: Fiyat bulunamadı (XPath: {xpath_price_span})")
            # Fiyat bazen farklı bir id ile (örn: 'offering-price') olabilir. Kontrol edilebilir.
            try:
                xpath_price_alt = '//*[@data-test-id="product-price"]' # Daha genel bir seçici
                price_element_alt = wait.until(EC.visibility_of_element_located((By.XPATH, xpath_price_alt)))
                product_info["price"] = price_element_alt.text.strip()
                if not product_info["price"]: # İçeriği script ile almayı dene
                     actual_price = driver.execute_script("return arguments[0].innerText;", price_element_alt)
                     product_info["price"] = actual_price.strip() if actual_price else None
            except (NoSuchElementException, TimeoutException):
                 print(f"Uyarı: Alternatif fiyat da bulunamadı (XPath: {xpath_price_alt})")
            except Exception as e_alt:
                 print(f"Alternatif fiyat çekilirken beklenmedik hata: {e_alt}")
        except Exception as e:
             print(f"Fiyat çekilirken beklenmedik hata: {e}")

        return product_info
    except Exception as e:
        print(f"Genel bir hata oluştu: {e}")
        return None
    finally:
        # --- Tarayıcıyı Kapat ---
        if driver:
            print("Tarayıcı kapatılıyor.")
            driver.quit()
# --- Betiği Çalıştırma ---
if __name__ == "__main__":
    # Test için örnek bir Hepsiburada URL'si (İstediğiniz URL ile değiştirin)
    # test_url = "https://www.hepsiburada.com/apple-iphone-15-pro-max-256-gb-natural-titanium-p-HBCV00004YQSY7"
    # test_url = "https://www.hepsiburada.com/logitech-m171-kablosuz-mouse-siyah-910-004424-p-BD804667"
    test_url = input("Lütfen Hepsiburada ürün URL'sini girin: ")
    if "hepsiburada.com" not in test_url:
         print("Lütfen geçerli bir Hepsiburada URL'si girin.")
    else:
        start_time = time.time()
        product_data = get_hepsiburada_product_info(test_url)
        end_time = time.time()
        if product_data:
            print("n--- Ürün Bilgileri ---")
            print(f"URL: {product_data['url']}")
            print(f"Ürün Adı: {product_data['product_name'] if product_data['product_name'] else 'Bulunamadı'}")
            print(f"Marka: {product_data['brand'] if product_data['brand'] else 'Bulunamadı'}")
            print(f"Satıcı: {product_data['seller'] if product_data['seller'] else 'Bulunamadı'}")
            print(f"Fiyat: {product_data['price'] if product_data['price'] else 'Bulunamadı'}")
            print("----------------------")
            print(f"İşlem süresi: {end_time - start_time:.2f} saniye")
        else:
            print("nÜrün bilgileri alınamadı.")