Bazı X (Twitter) sayfaları, giriş yapmamış bir tarayıcıya güncel içeriği (ör. bir hesabın en son tweeti) tam olarak göstermez — güncel veriye erişmek için oturum açmış olmanız gerekir. Bu derste Selenium ile bir X hesabına programatik giriş yapmayı göreceğiz.
Neden headless Mod Kullanmıyoruz?
Selenium'un "headless" modu, tarayıcı penceresini hiç açmadan arka planda çalışmasını sağlar. Ancak X gibi bazı siteler, headless modda gelen istekleri tespit edip engelleyebilir — bu yüzden bu derste normal (görünür pencereli) modda ilerliyoruz.
Kurulum
pip install selenium chromedriver-autoinstaller
Giriş Sayfasına Gitmek
import chromedriver_autoinstaller
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chromedriver_autoinstaller.install()
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get("https://twitter.com/i/flow/login")
Elemanların Yüklenmesini Beklemek: WebDriverWait
Sabit bir time.sleep(5) koyup "umarım o zamana kadar sayfa yüklenir" demek yerine, WebDriverWait, belirttiğiniz eleman gerçekten tıklanabilir/mevcut hale gelene kadar bekler — bu hem daha hızlı (sayfa erken yüklenirse beklemez) hem daha güvenilirdir (yavaş bir internette de hata vermez).
kullanici_adi_input = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "input[autocomplete='username']"))
)
kullanici_adi_input.send_keys("kullanici_adiniz")
Doğru Elemanı Bulmak: Tarayıcı "İncele" Aracı
Kullanıcı adı, şifre gibi giriş alanlarının tam CSS seçicisini veya XPath'ini bulmak için tarayıcınızda o alana sağ tıklayıp İncele'yi kullanın — input etiketinin autocomplete veya benzer bir özniteliğini (attribute) not edip kodda o özniteliğe göre eşleştirme yapın.
"İleri" Butonuna Tıklamak
ileri_butonu = wait.until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='İleri']]"))
)
ileri_butonu.click()
Şifreyi Girmek ve Giriş Yapmak
sifre_input = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "input[autocomplete='current-password']"))
)
sifre_input.send_keys("sifreniz")
giris_butonu = wait.until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Giriş yap']]"))
)
giris_butonu.click()
Bu Otomasyonun Kırılganlığı
Bu tür siteye özgü seçiciler (CSS selector/XPath), hedef sitenin arayüz güncellemeleriyle sıkça değişir — bir gün çalışan kod, sitenin bir HTML güncellemesinden sonra çalışmayı durdurabilir. Bu, sitelere özgü scraping/otomasyon çözümlerinin genel bir zayıflığıdır; mümkün olduğunda resmi bir API kullanmak (varsa) her zaman daha kararlı bir çözümdür.
Sırada Ne Var?
Sırada, Binance API'siyle kripto para fiyatlarını gerçek zamanlı çekmeyi göreceğiz.