Yapay zeka ile otomasyon yapmak artık tekrarlayan işini bir kodlama ajanına anlatmak ve onun yazdığı küçük Python scriptini denemekten ibaret. Dosya yeniden adlandırma, Excel ve CSV birleştirme, haftalık e-posta raporu ya da bir sitedeki fiyatları takip eden scraping botu için çoğu zaman 50–200 satırlık bir script yeter. Asıl iş prompt yazmak değil: girdiyi net tarif etmek, sonucu kontrol etmek, scripti zamanlamak ve bozulduğunda haberdar olmak.
Bu yazıda sıfırdan çalışan bir otomasyona kadar adım adım gidiyorum: ne kurulur, hangi araç ne zaman seçilir, ajana ilk mesajda ne yazılır, nasıl test edilir ve cron ile nasıl her gün çalıştırılır. Scraping’in yasal ve etik tarafını da atlamıyorum, çünkü yapay zeka bunu senin yerine düşünmez.
Yapay zeka ile otomasyon ne demek?
Burada kastettiğim, bir yapay zeka modelinin her seferinde işi kendisinin yapması değil. Ajan bir kez script yazar; sonra o script yapay zeka olmadan, her gün aynı şekilde çalışır. Bu ayrım önemli: script ucuzdur, tekrarlanabilirdir ve ne yaptığı okunabilir. Modeli her gün çağıran bir düzen hem daha pahalı hem daha tahmin edilemez olur.
Buna vibe coding de deniyor: kodu satır satır sen yazmıyorsun, ne istediğini anlatıp sonucu yönlendiriyorsun. Otomasyon işleri bu yaklaşıma çok uygun, çünkü hedef net ve sonucu kontrol etmek kolay: dosyalar doğru adlandı mı, tabloda doğru satırlar var mı?
Hangi işler otomasyona uygun?
İyi bir aday şu üç özelliği taşır: sık tekrarlanır, kuralları yazıya dökülebilir ve hata yapınca geri alınabilir. Gündelik örnekler:
- Dosya işleri: İndirilenler klasöründeki faturaları tarihe göre yeniden adlandırıp yıl/ay klasörlerine taşımak.
- Excel ve CSV: Her şubeden gelen satış dosyalarını birleştirmek, boş satırları temizlemek, özet sayfası üretmek.
- E-posta raporları: Bir klasördeki ya da veritabanındaki veriden haftalık özet çıkarıp kendine veya ekibine göndermek.
- Web takibi: Bir ürünün fiyatını, bir ilan sayfasındaki yeni kayıtları ya da bir duyuru sayfasını izleyip değişince haber vermek.
Kararın insanda kalması gereken işler (birine ödeme yapmak, sözleşme göndermek) için otomasyonu “hazırla, ben onaylayayım” noktasında durdur.
Adım 1: Araçları kur
Bir kodlama ajanına ve Python’a ihtiyacın var. Ajan olarak Claude Code, Codex, Gemini CLI ya da Aider gibi terminalde çalışan bir kodlama ajanı kullanabilirsin; hepsi dosya okuyup yazabiliyor ve komut çalıştırabiliyor.
# Python 3 kurulu mu?
python3 --version
# proje klasörü ve sanal ortam
mkdir fatura-duzenleyici && cd fatura-duzenleyici
git init
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
Neden Python? Otomasyon kütüphaneleri çok olgun: tablolar için pandas ve openpyxl, HTTP için requests, HTML ayrıştırma için beautifulsoup4, tarayıcı için playwright. Ajanlar da bu kütüphanelerle çok sayıda örnek görmüş durumda, bu yüzden daha az hata yapıyorlar. Klasörü git deposu yapmak da ajanın her değişikliğini geri alabilmeni sağlıyor.
Adım 2: İlk prompt
Ajana belirsiz bir istek verirsen belirsiz bir script alırsın. İyi bir ilk mesajda girdi, çıktı, kurallar ve kenar durumları olur. Klasöre iki üç gerçek örnek dosya koy (kişisel veri varsa sahte olanları) ve ajana göster:
Bir Python scripti yaz: rename_invoices.py
Girdi: ./inbox klasöründeki PDF faturalar. Örnekler ./samples içinde.
Her PDF’in ilk sayfasında "Fatura Tarihi: GG.AA.YYYY" ve "Firma:" satırı var.
Yapacağı iş:
- Dosyayı YYYY-AA-GG_firma-adi.pdf olarak yeniden adlandır (firma adı küçük harf, boşluk yerine tire).
- ./arsiv/YYYY/AA/ klasörüne taşı.
- Tarih ya da firma okunamazsa dosyaya dokunma, ./hatali klasörüne kopyala ve log’a yaz.
Kurallar:
- Varsayılan olarak --dry-run çalışsın: ne yapacağını yazsın, hiçbir dosyaya dokunmasın.
- Gerçek işlem için --apply bayrağı gereksin.
- Aynı adda dosya varsa üzerine yazma, sonuna -2 ekle.
- Bağımlılıkları requirements.txt’ye yaz.
- Bitince scripti samples üzerinde --dry-run ile çalıştır ve çıktıyı göster.
Buradaki iki kural her otomasyon için altın değerinde: varsayılan olarak kuru çalışma ve asla üzerine yazmama. Ajan yanlış bir tarih okuduğunda yüzlerce dosyayı yanlış yere taşıyan bir script yerine, sana önce listeyi gösteren bir script alırsın.
Adım 3: Yinele ve test et
İlk sürüm nadiren her dosyada çalışır. Döngü şöyle:
--dry-runçıktısını oku. Yanlış eşleşen bir dosya var mı?- Sorunlu dosyayı ajana göster: “
samples/fatura_7.pdfiçin tarih 01.01.1970 çıktı, dosyada tarih ‘Düzenleme Tarihi’ başlığıyla geçiyor, iki biçimi de destekle.” - Ajandan bu durum için küçük bir test eklemesini iste.
pytestile birkaç örnek dosya yeterli. - Her şey doğru göründüğünde bir kopyada
--applyile çalıştır, sonra gerçek klasörde.
Excel ve CSV işlerinde kontrol daha basit: girdideki satır sayısı ile çıktıdaki toplamları karşılaştır. “Birleştirilen dosyada 1.240 satır olmalı, toplam ciro şu kadar olmalı” gibi bir kontrolü scriptin kendisine yazdır. Ajanın yazdığı kod çalışıyor diye doğru hesap yaptığını varsayma.
Adım 4: Scraping botu — requests mi, Playwright mı?
Web scraping’de ilk karar, sayfanın nasıl oluştuğu. Tarayıcıda sağ tıklayıp “Sayfa kaynağını görüntüle” de ve aradığın veri (fiyat, başlık) kaynakta geçiyor mu bak.
Kaynakta görünüyorsa: requests ve BeautifulSoup yeter. Hızlıdır, tarayıcı açmaz, sunucuya az yük bindirir.
import requests
from bs4 import BeautifulSoup
HEADERS = {"User-Agent": "fiyat-takip/1.0 (iletisim@ornek.com)"}
resp = requests.get("https://ornek.com/urun/123", headers=HEADERS, timeout=20)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
price = soup.select_one(".product-price")
if price is None:
raise RuntimeError("Fiyat alanı bulunamadı; sayfa yapısı değişmiş olabilir")
print(price.get_text(strip=True))
İçerik JavaScript ile sonradan geliyorsa ya da giriş yapmak, butona tıklamak, sayfayı kaydırmak gerekiyorsa gerçek bir tarayıcı lazım. Playwright bunun için yaygın bir seçim:
pip install playwright
playwright install chromium
Ajana hangisini kullanacağını söyleme; önce kontrol etmesini iste:
https://ornek.com/kategori/kulaklik sayfasındaki ürün adlarını ve fiyatlarını çekmek istiyorum.
Önce robots.txt’yi ve sayfa kaynağını kontrol et: veri HTML’de var mı, yoksa
JavaScript ile mi yükleniyor? Sitenin herkese açık bir API’si ya da JSON
uç noktası varsa onu tercih et. Sonra en basit çözümü seç ve nedenini yaz.
İstekler arasında en az 3 saniye bekle, en fazla 5 sayfa gez.
Sonucu urunler.csv dosyasına yaz.
Bir ipucu: Playwright ile açtığın birçok sitede tarayıcının ağ sekmesinde verinin aslında bir JSON isteğiyle geldiğini görürsün. O uç noktayı doğrudan çağırmak hem daha sağlam hem daha hafif olabilir; ama yine sitenin koşullarına tabi.
Yasal ve etik sınırlar: robots.txt, koşullar, KVKK
Yapay zeka sana bir siteyi kazıyan kodu memnuniyetle yazar; yapıp yapmaman gerektiğine sen karar verirsin. Hukuki danışmanlık değil ama pratik kurallarım şunlar:
- Önce resmi API. Birçok site, borsa, kargo şirketi ve kamu kurumu veriyi API ile sunuyor. API daha kararlı, kuralları belli ve sayfa tasarımı değişince bozulmaz.
- robots.txt’ye ve kullanım koşullarına bak. Koşullar otomatik erişimi açıkça yasaklıyorsa ya da robots.txt o yolu kapatıyorsa yapma. Giriş gerektiren alanları kazımak çoğu zaman koşulları ihlal eder.
- Kişisel veriye dokunma. İsim, telefon, e-posta gibi verileri toplamak KVKK ve GDPR kapsamına girer; amacın, dayanağın ve saklama süren olmadan bu verileri toplama.
- Yavaş ol. İstekler arasında birkaç saniye bekle, aynı anda tek istek at, aynı sayfayı gereksiz yere tekrar çekme. Kendini tanıtan bir User-Agent kullan.
- Telif hakkına dikkat. Fiyat ya da stok bilgisini kendin takip etmek ile başkasının içeriğini kopyalayıp yayınlamak farklı şeyler.
- Engelleri aşmaya çalışma. CAPTCHA çözdürmek, IP döndürmek, giriş korumasını atlatmak; bunlar sitenin seni istemediğinin işareti.
Adım 5: Hata yönetimi, tekrar deneme ve bildirim
Bir gün çalışan script bir hafta sonra sessizce bozulur: site tasarımı değişir, Excel’e yeni bir sütun eklenir, ağ kopar. Ajandan şunları baştan istemek işini kolaylaştırır:
Scripti üretim için sağlamlaştır:
- Ağ isteklerinde zaman aşımı olsun; geçici hatalarda (bağlantı hatası, 429, 5xx)
artan beklemeyle en fazla 3 kez tekrar dene. 4xx hatalarında tekrar deneme.
- Her çalıştırmayı logs/AAAA-AA-GG.log dosyasına yaz.
- Sonuç sıfır satırsa ya da beklenen alan bulunamazsa bunu hata say.
- Hata olursa .env içindeki SMTP bilgileriyle bana e-posta gönder; mesajda hatanın
özeti ve log dosyasının yolu olsun.
- Başarılı çalıştırmada bildirim gönderme.
“Sıfır sonuç da hatadır” kuralı en çok işe yarayan kural. Scraping botlarının çoğu bozulduğunda hata vermez, boş bir CSV üretir. Bildirim için e-posta yerine Slack ya da Telegram’ın webhook ve bot API’lerini de kullanabilirsin; hangisi seni gerçekten uyarıyorsa onu seç.
Adım 6: cron ile zamanla
Script hazırsa düzenli çalıştırmanın en basit yolu macOS ve Linux’ta cron. crontab -e ile şu satırı ekle:
# Her gün 08:30'da çalıştır
30 8 * * * cd /Users/sen/fiyat-takip && .venv/bin/python track.py >> logs/cron.log 2>&1
Dikkat etmen gerekenler:
- cron senin terminal ortamını yüklemez. Python’un tam yolunu (sanal ortamın içindekini) yaz ve
cdile klasöre gir. - Bilgisayar uykudaysa cron çalışmaz. Her gün kesin çalışması gereken işler için küçük bir Linux sunucu ya da GitHub Actions’taki zamanlanmış iş daha güvenilir.
- Windows’ta aynı işi Görev Zamanlayıcı yapar; ajandan bir
.batdosyası ve kurulum adımlarını yazmasını isteyebilirsin. - İlk hafta logları her gün kontrol et.
Yapay zekanın sık yaptığı hatalar
- Var olmayan seçiciler uydurmak. Ajan sayfayı görmeden
.pricegibi bir CSS sınıfı tahmin eder. Ona gerçek HTML’i ver ya da sayfayı indirip incelemesini iste. - Hataları yutmak.
except: passbloğu scripti “çalışıyor” gösterir ama hiçbir şey yapmaz. Koddaki herexceptsatırına bak. - Tarih ve sayı biçimleri. Türkçe Excel dosyalarında
1.234,56gibi sayılar veGG.AA.YYYYtarihleri sık yanlış okunur. Çıktıdaki birkaç değeri kaynakla elle karşılaştır. - Kodlama sorunları. Türkçe karakterli CSV’ler bozuk görünüyorsa
utf-8-sigya dacp1254ile denemesini iste. - Fazla iddialı başarı mesajları. “Script tamamlandı ve test edildi” cümlesi tek başına kanıt değil. Çıktıyı sen gör.
- Gereğinden fazla bağımlılık. On satırlık bir iş için tarayıcı otomasyonu kurmak ya da bir framework getirmek. En basit çözümü iste.
Güvenlik
- Gizli bilgiler
.envdosyasında. SMTP parolası, API anahtarı, giriş bilgileri koda yazılmaz;python-dotenvile.env’den okunur ve.env.gitignore’a eklenir. Depoya örnek için değersiz anahtarlarla bir.env.examplekoy. - Anahtarı sohbete yapıştırma. Ajana “anahtarım şu” diye yazma. Konuşmalar saklanabilir ve kayıtlara düşebilir. Ajana yalnızca değişkenin adını söyle: “
SMTP_PASSWORDortam değişkeninden oku.” - Ajanın çalıştırdığı komutları oku. Özellikle
rm, toplumv,pip installile bilmediğin paketler ve dışarıya veri gönderen komutlar. Emin değilsen onaylama. - En az yetki. Bir e-posta hesabına bağlanacaksan uygulama parolası kullan; bir API’ye bağlanacaksan yalnızca okuma izni olan bir anahtar oluştur.
AgentVera ile nasıl yapılır?
Bunların hepsi düz bir terminal ve tek bir ajanla yapılabilir. Ben birkaç otomasyonu birden yürütürken AgentVera kullanıyorum, çünkü bazı adımları kolaylaştırıyor:
- Ayrı ajanlar, ayrı klasörler. Çalışma alanında bir panelde Claude Code scraping scriptini yazarken diğerinde Codex Excel raporunu hazırlayabilir. Aynı depodalarsa her birine ayrı bir git worktree vermek çakışmayı önler.
- Ajan tarayıcısı. Playwright kullanan ajanlar ayrı profilli bir Chrome’u kullanır; ajan tarayıcısında sayfada ne yaptığını canlı izlersin. Seçicilerin neden tutmadığını anlamak kolaylaşıyor.
- Sunucuda çalıştırmak. SSH ve SFTP sayfasından scripti sunucuya kopyalayıp orada crontab’ı kurabilirsin.
- Zamanlanmış ajan mesajları. Zamanlanmış görevler scripti değil, bir ajana giden mesajı zamanlar. Örneğin haftada bir “logları oku, hata varsa nedenini özetle” diye sorabilirsin. Günlük işi yine cron yapmalı.
- Diff’i incele. Kod incelemesi biten her turu kontrol eder; sağlamlaştırma adımında yutulan hataları yakalamak için işe yarar.
Ajanları bir zincir hâlinde kullanmayı merak ediyorsan yapay zeka ajan iş akışı yazısına, ajana harici araç bağlamak için MCP sunucusu nedir yazısına bakabilirsin.
Kısa kontrol listesi
- Girdi, çıktı ve kenar durumları ilk prompt’ta yazılı
- Varsayılan kuru çalışma, üzerine yazma yok
- Örnek dosyalarla test ve elle kontrol edilmiş birkaç sonuç
- Varsa resmi API tercih edildi; robots.txt ve koşullar okundu
- İstekler arasında bekleme, zaman aşımı ve sınırlı tekrar deneme
- Sıfır sonuç hata sayılıyor, hatada bildirim gidiyor
- Gizli bilgiler
.env’de,.envgit dışında - cron satırında tam yollar, ilk hafta loglar kontrol ediliyor
Sonuç
Yapay zeka ile otomasyon yapmanın sırrı, ajana küçük ve iyi tarif edilmiş bir iş vermek ve çıkan scripti bir yazılım gibi ele almak: kuru çalıştırma, test, log, bildirim. Scraping tarafında teknik karar kolay (kaynakta varsa requests, yoksa Playwright); zor olan, sınırlara uymak ve resmi bir yol varken onu seçmek. İlk otomasyonun için bu hafta üç kez elle yaptığın bir işi seç, yukarıdaki prompt’u kendine uyarla ve kuru çalıştırmayla başla.