Python İle Otomatik Web Form Doldurma Botu Nasıl Yapılır?

Python İle Otomatik Web Form Doldurma Botu Nasıl Yapılır?
Python İle Otomatik Web Form Doldurma Botu Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Otomasyon projelerine başlamadan önce çalışma ortamınızı doğru yapılandırmanız gerekir. 2026 yılı itibarıyla Selenium, WebDriver Manager ile birlikte kullanıldığında çok daha kararlı sonuçlar vermektedir. İhtiyacınız olan temel araçlar şunlardır:

  • Python 3.12+: Modern sözdizimi ve performans iyileştirmeleri için güncel sürüm kullanılması önerilir.
  • Selenium: Web tarayıcılarını programatik olarak kontrol etmemizi sağlayan temel kütüphane.
  • WebDriver Manager: Tarayıcı sürücülerinin (Chrome Driver vb.) otomatik olarak indirilmesini ve güncel tutulmasını sağlar.

Gerekli kütüphaneleri yüklemek için terminalinizde aşağıdaki komutu çalıştırın:

pip install selenium webdriver-manager

Bu komut, tarayıcı etkileşimi için gerekli olan Selenium çekirdeğini ve sürücü yönetimini sisteminize kuracaktır.

Selenium ile Tarayıcıyı Başlatma ve Temel Yapı

Otomasyonun ilk adımı, tarayıcıyı Python üzerinden yönetilebilir bir nesne haline getirmektir. Aşağıdaki kod bloğu, Chrome tarayıcısını başsız (headless) olmayan modda başlatır ve belirtilen bir URL'ye gider.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Tarayıcı ayarlarını yapılandır
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

# Hedef siteye git
driver.get("https://example.com/form")

# İşlem bittiğinde tarayıcıyı kapat
# driver.quit()

Burada ChromeDriverManager kullanarak sürücünün manuel indirilmesi zahmetinden kurtuluyoruz. driver.get() metodu, botunuzun belirtilen adrese yönlenmesini sağlar.

Web Form Elemanlarını Bulma ve Veri Gönderme

Form doldurma işleminin kalbi, HTML etiketlerini (input, textarea, select) doğru bir şekilde seçmektir. Selenium, XPath veya CSS Selector kullanarak bu elemanlara erişmemize olanak tanır. En güvenilir yöntem, elemanlara özgün ID veya Name değerleri üzerinden ulaşmaktır.

from selenium.webdriver.common.by import By

# İsim alanını bul ve veri gönder
isim_alani = driver.find_element(By.ID, "ad-soyad")
isim_alani.send_keys("Ahmet Yılmaz")

# E-posta alanını bul ve veri gönder
email_alani = driver.find_element(By.NAME, "email")
email_alani.send_keys("test@example.com")

send_keys() fonksiyonu, klavye girişi simülasyonu yapar. Eğer formda bir "Submit" butonu varsa, buton.click() metodu ile formu gönderebilirsiniz.

Bekleme Stratejileri: Explicit ve Implicit Wait

Web sayfaları dinamik olarak yüklendiği için, botunuzun elemanı henüz yüklenmeden bulmaya çalışması hata (NoSuchElementException) verecektir. Bu yüzden "bekleme" stratejileri hayati önem taşır.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Elemanın sayfada görünür olmasını 10 saniye bekle
wait = WebDriverWait(driver, 10)
gonder_butonu = wait.until(EC.element_to_be_clickable((By.ID, "submit-btn")))
gonder_butonu.click()

WebDriverWait kullanmak, kodunuzun sadece ihtiyaç duyulduğu kadar beklemesini sağlar, bu da botunuzun performansını artırır.

Otomasyon Yöntemlerinin Karşılaştırılması

Web formlarını doldurmak için farklı yaklaşımlar mevcuttur. İhtiyacınıza göre en uygun yöntemi seçmek projenizin başarısını doğrudan etkiler.

Yöntem Avantajı Dezavantajı
Selenium Görsel arayüz etkileşimi, JS desteği Yavaş çalışma, kaynak tüketimi
Playwright Çok hızlı, modern ve kararlı Öğrenme eğrisi biraz daha dik
Requests + BS4 Çok hızlı (HTTP isteği) JavaScript içeren formlarda çalışmaz

Güvenlik ve Etik Kullanım İlkeleri

Kritik Uyarı: Otomasyon botları geliştirirken hedef sitenin robots.txt dosyasını mutlaka inceleyin. Ayrıca, form doldurma işlemlerinde asla kullanıcı şifrelerini kod içerisinde açık metin (plain-text) olarak tutmayın. Form verilerini güvenli bir şekilde işlemek için ortam değişkenlerini (environment variables) kullanın ve botunuzu aşırı yük bindirecek şekilde (DDoS benzeri) çalıştırmaktan kaçının.

Kod güvenliği sorumluluk reddi: Bu rehberdeki kodlar eğitim amaçlıdır. Otomasyon araçlarının kötü niyetli kullanımı, hedef platformların kullanım koşullarına aykırı olabilir ve yasal sonuçlar doğurabilir. Yazılımlarınızın güvenliğinden ve etik kullanımından geliştirici olarak siz sorumlusunuz.

Sıkça Sorulan Sorular

Botum "ElementNotInteractableException" hatası veriyor, ne yapmalıyım?

Bu hata, elemanın sayfada var olduğunu ancak henüz tıklanabilir veya yazılabilir olmadığını gösterir. Bekleme stratejilerini (WebDriverWait) kullanarak eleman tamamen yüklenene kadar beklemeyi deneyin.

Headless (Başsız) modda botu nasıl çalıştırırım?

options.add_argument("--headless=new") satırını tarayıcı seçeneklerinize ekleyerek tarayıcıyı görsel arayüz olmadan arka planda çalıştırabilirsiniz.

Captcha içeren formları nasıl aşabilirim?

Captcha, botların insan olup olmadığını anlamak için tasarlanmıştır. Otomatik olarak aşılması zordur ve genellikle etik değildir. Projenizde Captcha varsa, bu alanları manuel doldurmak için bir bekleme süresi (time.sleep) ekleyebilirsiniz.

Botun IP adresinin engellenmesini nasıl önlerim?

Çok hızlı istek göndermek IP'nizin engellenmesine neden olabilir. İşlemler arasına rastgele bekleme süreleri (random sleep) eklemek ve proxy servislerini kullanmak bu riski azaltabilir.

Selenium yerine hangi kütüphaneyi önerirsiniz?

Eğer modern ve yüksek performanslı bir otomasyon arıyorsanız, Microsoft tarafından geliştirilen Playwright kütüphanesini incelemenizi tavsiye ederim.

Veri Odaklı Test (Data-Driven) Mimarisi ile Dinamik Form Doldurma

Botunuzu tek bir veri seti ile çalıştırmak yerine, harici bir kaynaktan (CSV veya Excel) beslemek, otomasyon projelerinizin ölçeklenebilirliğini artırır. Bu yöntem sayesinde aynı form yapısını yüzlerce farklı kullanıcı verisiyle saniyeler içinde test edebilirsiniz.

Aşağıdaki örnekte, pandas kütüphanesini kullanarak bir CSV dosyasından verileri nasıl çekeceğinizi ve Selenium ile döngü içerisinde nasıl işleyeceğinizi görebilirsiniz:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# CSV dosyasını oku
data = pd.read_csv('kullanici_verileri.csv')

driver = webdriver.Chrome()

for index, row in data.iterrows():
    driver.get("https://example.com/form")
    
    # Form alanlarını doldur
    driver.find_element(By.ID, "ad").send_keys(row['ad'])
    driver.find_element(By.ID, "soyad").send_keys(row['soyad'])
    driver.find_element(By.ID, "email").send_keys(row['email'])
    
    driver.find_element(By.ID, "submit-button").click()
    
    # İşlem sonrası kısa bekleme
    time.sleep(2)

driver.quit()

Otomasyon Botlarında Hata Ayıklama ve Loglama Stratejileri

Karmaşık form yapılarında botun nerede hata yaptığını anlamak için gelişmiş bir loglama mekanizması kurmak kritiktir. Sadece hata mesajlarına güvenmek yerine, her adımda ekran görüntüsü (screenshot) almak veya tarayıcı konsol çıktılarını kaydetmek, hata ayıklama sürecini hızlandırır.

Hata Anında Ekran Görüntüsü Alma

Botunuz bir form elemanını bulamadığında veya beklenmedik bir hata fırlattığında, o anki tarayıcı durumunu görsel olarak kaydetmek için try-except bloklarını kullanabilirsiniz:

try:
    submit_btn = driver.find_element(By.ID, "submit-button")
    submit_btn.click()
except Exception as e:
    print(f"Hata oluştu: {e}")
    driver.save_screenshot(f"hata_{int(time.time())}.png")
    # Hata logunu bir dosyaya yazdır
    with open("bot_logs.txt", "a") as log_file:
        log_file.write(f"Hata zamanı: {time.ctime()} - Mesaj: {str(e)}\n")

Performans Optimizasyonu İçin İpuçları

  • Gereksiz Yüklemeleri Engelleme: Tarayıcı ayarlarında resim (images) ve CSS yüklemelerini devre dışı bırakarak sayfa açılış hızını %40'a kadar artırabilirsiniz.
  • Headless Mod Kullanımı: Grafik arayüzünü (GUI) çalıştırmamak, sistem kaynaklarını (RAM/CPU) ciddi oranda tasarruf etmenizi sağlar.
  • Select Elemanları: Formlardaki açılır menüler (dropdown) için Select sınıfını kullanmak, manuel tıklamalardan daha hızlı ve kararlıdır.
İpucu: Çoklu form doldurma işlemlerinde, her 50 işlemden sonra tarayıcıyı tamamen kapatıp yeniden başlatmak (restart), tarayıcı önbelleğinde biriken çöp verilerin performansı düşürmesini engeller.

Sonuç

Python ile otomatik web form doldurma botu yapmak, doğru kütüphane seçimi ve bekleme stratejileri ile oldukça verimli bir süreçtir. Bu rehberde, Selenium ile tarayıcıyı başlatmayı, form elemanlarını bulmayı ve güvenli bir şekilde veri göndermeyi öğrendiniz. Bir sonraki adım olarak, doldurduğunuz verileri bir Excel veya CSV dosyasından okuyarak botunuzu çok daha dinamik hale getiren "veri odaklı test" (data-driven testing) mimarisine geçiş yapabilirsiniz.

Bu yazıya tepkinizi paylaşın:
Zeynep Kaya

Ev ekonomisi ve kişisel organizasyon üzerine birçok yayın yönettim. Okuyucuların günlük yaşam kalitesini artıracak uygulanabilir çözümler üretmeyi hedefliyorum.

Yorumlar (0)

Yorum Yaz