PyAutoGUI: Python ile fare ve klavyeyi otomatikleştirmek
PyAutoGUI, Python betiğinin fareyi ve klavyeyi bir insan gibi kullanmasını sağlar. API bulunmayan masaüstü uygulamalarında iş görür, ama kırılgandır; ne zaman, nasıl ve hangi önlemlerle kullanılacağı bilinmelidir.
Bir bakışta
- PyAutoGUI ekrandaki fare ve klavye olaylarını taklit eder. Uygulamanın içine değil, kullanıcının yaptığı gibi arayüze etki eder.
- Son çaredir, ilk tercih değildir. Uygulamanın API'si, dosya arayüzü ya da komut satırı varsa onlar çok daha sağlamdır.
- Koordinat yerine görüntü ya da kısayol tercih edilir. Pencere kayarsa koordinatla tıklama yanlış yere gider.
- Fail-safe ve bekleme ayarları kullanılmadan betik çalıştırılmaz. Fareyi köşeye götürerek betiği durdurabilmek, kontrolü kaybetmemenin yoludur.
- Her adımın ardından bir doğrulama gerekir. Beklenen pencere açıldı mı diye bakılmadan devam eden betik, yanlış yere yazı yazar.
PyAutoGUI ne yapar, ne zaman kullanılır?
PyAutoGUI, işletim sisteminin fare ve klavye girdilerini taklit eden bir Python kütüphanesidir. Fareyi bir noktaya götürür, tıklar, sürükler, tuşlara basar, kısayol kombinasyonları gönderir ve ekran görüntüsü alır. Uygulamanın içine girmez; yalnızca ekranda bir kullanıcının yapabileceği şeyleri yapar.
Bu, onu iki durumda değerli kılar. Birincisi, hiçbir API ya da dosya arayüzü sunmayan eski bir masaüstü programıdır; örneğin yalnız arayüzden veri girilebilen bir muhasebe ya da kurumsal uygulama. İkincisi, arayüz üzerinde yapılan ve sürekli tekrarlanan bir işlemin hızlıca otomatikleştirilmesidir.
Bedeli kırılganlıktır. Pencere yeri, ekran çözünürlüğü, tema, dil ve uygulama sürümü değiştiğinde betik şaşırabilir. Bilgisayar betik çalışırken başka bir iş için kullanılamaz, çünkü fare ve klavye betiğe aittir. Bu nedenle önce şunu sorun: işi arayüze dokunmadan yapmanın bir yolu var mı? Bir dosya içe aktarma, komut satırı ya da API çoğu zaman daha sağlamdır. Python'la belge, e-posta ve dosya otomasyonu için ayrı rehberler vardır; PyAutoGUI bunların yetmediği yerde devreye girer.
Arayüze dokunmak, otomasyon seçeneklerinin en altındadır
Sağlamdan kırılgana doğru tercih sırası
- API ya da komut satırıArayüze hiç dokunmaz; en sağlam yoldur.
- Dosya içe ve dışa aktarmaUygulamanın kendi aktarım özelliği kullanılır.
- Klavye kısayollarıPencere yerinden bağımsızdır.
- Görüntü eşleme ile tıklamaÖğe nerede olursa olsun bulunur.
- Sabit koordinatEn kırılgan olanıdır; son çare.
Kurulum ve temel komutlar
Kütüphane pip ile kurulur: pip install pyautogui. Ekran görüntüsü işlevleri bir Pillow görüntüsü döndürür. İşletim sistemine göre uygulamanın ekranı okuyabilmesi ve girdi gönderebilmesi için ek izinler gerekebilir; güncel kurulum notlarını kütüphanenin resmî belgelerinden kontrol edin.
Temel komutlar sezgiseldir. Fareyi mutlak konuma götürmek için moveTo, mevcut konuma göre götürmek için moveRel kullanılır; ikisi de duration parametresiyle hareketi yumuşatır. click, belirli bir noktaya ya da mevcut konuma tıklar; button parametresiyle sağ ve orta tuş da seçilebilir. doubleClick ve rightClick kısayollarıdır. typewrite, klavyeden bir metin yazar; hotkey ise ctrl ve c gibi tuş kombinasyonlarını gönderir.
Ekranda ne olduğunu görmek için screenshot kullanılır; bir Pillow görüntüsü döndürür ve istenirse dosyaya kaydeder. Görüntü eşleme için locateOnScreen, kayıtlı bir küçük görüntünün ekrandaki konumunu arar. Belgeye göre bulunamazsa None döner; yeni sürümlerde bulunamama bir istisna olarak da gelebilir, kullandığınız sürümün davranışını deneyerek doğrulayın.
İlk betik: bir formu doldurmak
Şu betik, açık bir masaüstü uygulamasında "Kaydet" düğmesini görüntüyle bulur, bir alana metin yazar ve kaydeder. Bekleme süresi ve koruma ayarları betiğin başında, sayısal değerler yapılandırmadan alınır:
import os import pyautogui
pyautogui.FAILSAFE = True pyautogui.PAUSE = float(os.environ["ADIM_BEKLEME"])
def bul(gorsel): konum = pyautogui.locateCenterOnScreen(gorsel) if konum is None: raise RuntimeError("Öğe bulunamadı: " + gorsel) return konum
pyautogui.click(bul("alan_musteri_adi.png")) pyautogui.typewrite("Örnek Müşteri") pyautogui.hotkey("tab") pyautogui.typewrite("Notlar buraya") pyautogui.click(bul("dugme_kaydet.png"))
Betikte iki koruma vardır. FAILSAFE açıkken fareyi ekranın üst sol köşesine götürmek betiği bir istisnayla durdurur; kontrolü kaybettiğinizde çıkış yolunuz budur. PAUSE, her PyAutoGUI çağrısından sonra saniye cinsinden bir bekleme ekler; uygulamaya yanıt vermesi için zaman tanır.
bul işlevi ise her tıklamadan önce öğenin gerçekten ekranda olduğunu doğrular. Bulunamazsa betik körlemesine devam etmez, durur. Bu küçük işlev, otomasyonun sessizce yanlış yere tıklamasını önleyen en önemli alışkanlıktır.
Sağlam otomasyon için ilkeler
Koordinat yerine mümkün olduğunca görüntü eşleme ya da klavye kısayolu kullanın. Görüntü eşleme için kayıt aldığınız küçük görüntüleri aynı çözünürlük ve ölçekte hazırlayın; farklı bir ekranda çalışacak betik için ekran ölçeğini sabitleyin. Düğme görüntüsünü çok küçük almayın; yakın görünen öğelerle karışmasın.
Her eylemin ardından bir doğrulama ekleyin. Bir pencerenin açılmasını beklemek için sabit bir uyku süresi yerine, beklenen öğe görünene kadar belirli bir süre yoklayan bir döngü kullanın. Böylece uygulama yavaş açıldığında betik şaşırmaz, hızlı açıldığında da boşuna beklemez.
Hata durumunu tasarlayın. Beklenen öğe bulunamazsa ekran görüntüsü alıp günlüğe yazın ve işlemi güvenli bir noktada durdurun. Bir tablodaki satırları dönerek işleyen betiklerde hangi satırın işlendiğini kaydedin; betik yarıda kesilirse kaldığı yerden devam edebilsin.
Betiğin çalıştığı makineyi ayırın. Betik fare ve klavyeyi kullandığından, aynı bilgisayarda başka işle uğraşırken çalıştırmak hem betiği hem işinizi bozar. Sanal bir makine ya da ayrı bir bilgisayar daha güvenlidir.
Kırılgan betik ile sağlam betik arasındaki fark küçük alışkanlıklardır
Aynı işi yapan iki yazım
Örnek senaryo: eski uygulamaya toplu veri girişi
Bir finans ekibi, tablo olarak elinde bulunan müşteri notlarını eski bir masaüstü uygulamasına girmek zorunda. Uygulamanın içe aktarma özelliği ve API'si yok; her kayıt elle yazılıyor. Ekip önce uygulama tedarikçisine toplu aktarma seçeneği sorar. Seçenek yoktur, bu nedenle PyAutoGUI düşünülür.
Betik, tabloyu okur. Her satır için kayıt arama alanına tıklar, müşteri kodunu yazar, sonuç listesindeki ilk satırın göründüğünü doğrular, not alanına metni yazar ve kaydeder. Sonuç görünmezse o satırı "bulunamadı" olarak işaretleyip sonrakine geçer. Başarılı her satırın durumu tabloya geri yazılır.
Betik ilk gün küçük bir örnek kümesiyle denenir; sonuçlar uygulamada elle kontrol edilir. Sorunsuzsa tam kümeyle, mesai dışında ayrı bir makinede çalıştırılır. Ertesi gün işaretlenen satırlar elle incelenir. Aynı iş için bir RPA aracı da seçilebilir; ama tek bir uygulamayı ilgilendiren bu küçük iş için Python betiği yeterli ve esnektir.
Sık hatalar ve güvenlik
En yaygın hata, betiği ilk kez canlı veriyle çalıştırmaktır. Önce deneme verisiyle ve mümkünse deneme ortamında çalıştırın. İkinci hata, fail-safe'i kapatmak ya da bekleme eklememektir; kontrolden çıkan bir betik yanlış alana çok sayıda kayıt yazabilir.
Üçüncü hata kimlik bilgilerini betiğe yazmaktır. Oturum açma gerekiyorsa şifreyi betiğe gömmeyin; ortam değişkenlerinden ya da güvenli bir kimlik bilgisi deposundan alın. Betiğe dosyaya yazılmış şifre koymak, paylaşıldığında sızıntıya dönüşür.
Dördüncü hata, ekran paylaşımı ya da başka bir kullanıcı oturumu sırasında betik çalıştırmaktır; ekranda hassas bilgi varken görüntü alan betik bunu dosyaya kaydedebilir. Beşinci hata, kurum izni olmadan otomasyon yapmaktır. Bazı uygulamalar kullanım koşullarında otomatik girdiyi yasaklar; bu hem uyum hem güvenlik sorunudur.
Bu beceriyi Mindset programlarında nerede çalışırsınız
Python ile Robotic Process Automation (RPA) Eğitimi, Python temellerinden başlayıp belge, PDF, veritabanı, e-posta otomasyonuna ve son modülde GUI otomasyonuna ilerler. Ofis işlerini otomatikleştirmek isteyen finans, operasyon ve BT çalışanlarına yöneliktir.
Python ile Programlama Eğitimi ise betiği yazarken ihtiyaç duyacağınız dil temellerini güçlendirmek isteyenler için uygundur.
İlgili Mindset programı
Python ile Robotic Process Automation ( RPA ) Eğitimi
Sık sorulan sorular
PyAutoGUI arka planda çalışabilir mi?
Hayır. Fare ve klavye olayları ekrandaki etkin pencereye gönderilir; betik çalışırken bilgisayarı başka iş için kullanamazsınız. Arka planda çalışacak bir çözüm gerekiyorsa uygulamanın API'sini, komut satırını ya da bir sanal makinede çalıştırmayı düşünün.
Pencere yerini değiştirince betik neden bozuluyor?
Betik sabit koordinatlara tıklıyorsa, pencere kayınca tıklama yanlış noktaya gider. Çözüm, görüntü eşleme ya da klavye kısayolu kullanmak ve pencereyi betiğin içinde bilinen bir konuma almaktır.
Görüntü eşleme neden bazen öğeyi bulamıyor?
Ekran çözünürlüğü, ölçek, tema ya da renk farklılıkları kayıtlı görüntüyle ekran arasında uyumsuzluk yaratır. Kayıt görüntüsünü betiğin çalışacağı makinede ve aynı ayarlarla alın. Bulamadığında betiğin bir hata verip durmasını sağlayın.
PyAutoGUI ile RPA aracı arasında nasıl seçim yapılır?
Tek ya da birkaç küçük iş, kod yazabilen biri ve esneklik varsa Python betiği yeterlidir. Çok sayıda süreç, kurumsal izleme, yetkilendirme ve kod yazmayan kullanıcıların yönetimi gerekiyorsa özel bir RPA platformu daha uygun olur.