اگر می خواهید کلیک ها، تایپ، اسکرول و گرفتن اسکرین شات را بدون دخالت دست کنترل کنید، کتابخانه ای سبک و چند سکویی پاسخ شما است. PyAutoGUI در پایتون امکان می دهد کارهای تکراری روی ویندوز، لینوکس و مک را به اسکریپت های ساده تبدیل کنید و سرعت، دقت و ثبات فرایندهای روزمره را بالا ببرید.

چرا خودکارسازی دسکتاپ می تواند تفاوت بسازد

کارهای دستی روی دسکتاپ زمان می گیرند، مستعد خطا هستند و حواس شما را از وظایف مهم تر پرت می کنند. با خودکارسازی می توانید روی ارزش آفرینی تمرکز کنید و اجرای کارهای تکراری را به کد بسپارید.

این کتابخانه برای سناریوهایی مثل پر کردن فرم ها، تولید گزارش از نرم افزارهای قدیمی، اجرای تست های رابط کاربری، تهیه اسکرین شات های زمان بندی شده و ساخت دموهای قابل تکرار بسیار مفید است.

مزیت اصلی آن وابسته نبودن به برنامه مقصد است. حتی اگر برنامه شما API نداشته باشد، با شبیه سازی ماوس و کیبورد می توان به نتیجه رسید.

نصب و شروع سریع

پیش نیاز خاصی لازم نیست و نصب ظرف چند ثانیه انجام می شود. برای تشخیص تصویر بهتر است کتابخانه Pillow را هم نصب کنید.

pip install pyautogui pillow

پس از نصب، یک اسکریپت ساده بنویسید تا حرکت ماوس، کلیک و تایپ را ببینید. برای امنیت، کلید فرار تعبیه شده است: اگر ماوس را به گوشه بالا چپ صفحه ببرید، اجرای اسکریپت بلافاصله متوقف می شود.

import time
import pyautogui as pg

pg.FAILSAFE = True       # توقف فوری با بردن ماوس به گوشه بالا چپ
pg.PAUSE = 0.5           # مکث کوتاه بین دستورات برای پایداری

time.sleep(2)            # 2 ثانیه فرصت برای رفتن به پنجره هدف
pg.moveTo(200, 200, duration=0.5)
pg.click()
pg.write("Hello desktop automation!", interval=0.05)
pg.hotkey("ctrl", "s")   # میانبر ذخیره

اگر بار اول است، اسکریپت را در یک محیط امن اجرا کنید و برنامه هدفی را باز کنید که حساس نیست. به این ترتیب هر حرکت ناخواسته بدون ریسک تست می شود.

کار با مختصات و حرکت ماوس

مبنای تعامل، مختصات پیکسلی صفحه است. با تابع position می توانید مکان فعلی ماوس را ببینید و برای هدف گیری دکمه ها و فیلدها از آن استفاده کنید.

import pyautogui as pg

print(pg.size())          # اندازه صفحه
print(pg.position())      # مختصات فعلی ماوس

pg.moveTo(100, 300, duration=0.3)
pg.dragTo(600, 300, duration=0.7, button="left")  # درگ افقی
pg.scroll(-800)           # اسکرول به پایین

تابع moveRel حرکت نسبی انجام می دهد و برای پیمایش های تکراری مفید است. اگر پنجره ها جابه جا شوند، تکیه صرف بر مختصات مطلق می تواند ناپایدار شود؛ در این حالت از نشانه های بصری یا نواحی مرجع استفاده کنید.

کلیک، تایپ و کلیدهای میانبر

کلیک های چپ، راست و دوبل با یک خط انجام می شوند. برای ورودی متن، write از چیدمان سیستم پیروی می کند و می تواند با interval سرعت تایپ را کنترل کند. ترکیب کلیدها با hotkey قابل اجرا است.

import pyautogui as pg

# کلیک ها
pg.click(400, 450)                 # کلیک چپ
pg.rightClick(450, 450)            # کلیک راست
pg.doubleClick(500, 450)           # دوبل کلیک

# تایپ و میانبرها
pg.write("username123", interval=0.04)
pg.press("tab")
pg.write("P@ssw0rd", interval=0.05)
pg.hotkey("enter")

# کلیدهای خاص
pg.press(["home", "shift", "end"])  # دنباله ای از کلیدها

در ورودی های حساس مانند رمز عبور، بهتر است متن را به فایل پیکربندی رمزنگاری شده بسپارید و در زمان اجرا بخوانید. همچنین طول interval را کمی بالا بگیرید تا از حذف کاراکتر توسط برنامه هدف جلوگیری شود.

اسکرین شات و تشخیص تصویر

برای هدف گیری پایدارتر می توانید از مبنای تصویری استفاده کنید. با گرفتن اسکرین شات و جستجو به دنبال الگوی دکمه یا آیکن، اسکریپت شما در برابر جابه جایی پنجره ها مقاوم تر می شود.

import pyautogui as pg

# گرفتن اسکرین شات کل صفحه یا یک ناحیه
img = pg.screenshot()
img.save("screen.png")

# یافتن الگوی تصویری روی صفحه
location = pg.locateOnScreen("button.png", confidence=0.85)
if location:
    center = pg.center(location)
    pg.moveTo(center, duration=0.2)
    pg.click()
else:
    print("دکمه یافت نشد")

ویژگی confidence برای تطبیق تقریبی نیازمند نصب ماژول های مورد نیاز است و روی بعضی سیستم ها به OpenCV احتیاج دارد. اگر مقیاس نمایش در سیستم عامل 125 یا 150 درصد است، ممکن است تطبیق دقیق نباشد؛ در این صورت اندازه الگو را با مقیاس واقعی صفحه یکسان کنید یا مقیاس نمایش را روی 100 درصد قرار دهید.

یک سناریوی عملی گام به گام

فرض کنید می خواهید هر روز یک گزارش را از برنامه ای قدیمی استخراج کرده و به پوشه مشخصی ذخیره کنید. می توانید این روال را مرحله به مرحله خودکار کنید.

  1. برنامه را با میانبر سیستم عامل باز کنید یا از نوار جستجو اجرا کنید.
  2. با جستجوی تصویری دکمه گزارش را پیدا کرده و روی آن کلیک کنید.
  3. پارامترها را در فیلدها تایپ کنید و روی ذخیره بزنید.
import time
import pyautogui as pg

pg.FAILSAFE = True
pg.PAUSE = 0.4

# 1) باز کردن برنامه
pg.hotkey("win", "s")
pg.write("legacy app")
pg.press("enter")
time.sleep(2.5)  # صبر برای بارگذاری

# 2) یافتن دکمه گزارش با الگوی تصویری
report_btn = pg.locateOnScreen("report_btn.png", confidence=0.9)
if not report_btn:
    raise SystemExit("دکمه گزارش پیدا نشد")
pg.click(pg.center(report_btn))

# 3) تنظیم بازه و ذخیره
pg.write("2024-01-01")
pg.press("tab")
pg.write("2024-12-31")
pg.hotkey("alt", "s")  # میانبر ذخیره
time.sleep(1.2)
pg.write(r"C:\Reports\daily.pdf")
pg.press("enter")

برای پایداری بیشتر، پس از هر عمل حساس کمی تاخیر قرار دهید، موفقیت هر گام را با سنجش وجود یک عنصر تصویری تایید کنید و در صورت عدم موفقیت، مسیر جایگزین یا پیام خطا بدهید.

نکات کلیدی برای پایداری و ایمنی

  • از pg.PAUSE برای افزودن مکث پیش فرض بین دستورات استفاده کنید تا برنامه مقصد فرصت واکنش داشته باشد.
  • pg.FAILSAFE را روشن بگذارید تا با بردن ماوس به گوشه بالا چپ اجرای اسکریپت متوقف شود.
  • گام های شکننده را با try و سناریوهای جایگزین محافظت کنید. مثال: اگر locateOnScreen نتیجه نداد، چند بار تلاش و سپس خروج امن.
  • اگر رزولوشن یا چینش مانیتورها تغییر می کند، از روش تصویری یا نواحی نسبی به جای مختصات مطلق استفاده کنید.
  • ورودی های حساس را در حافظه نگه دارید و در لاگ ها چاپ نکنید. برای گزارش گیری از لاگ سطح بندی استفاده کنید.

خطاهای رایج و راه حل ها

  • تطبیق تصویری پیدا نمی شود: مقیاس نمایش را بررسی کنید، از اسکرین شات تازه با حاشیه کم استفاده کنید و confidence را کمی کاهش دهید.
  • کلیک در جای اشتباه: مختصات را با pg.position در زمان اجرا چاپ کنید و پنجره را به حالت تمام صفحه ثابت کنید.
  • تایپ ناقص: interval را افزایش دهید و فوکوس فیلد را با یک کلیک پیش از write تضمین کنید.
  • مجوز در macOS: در تنظیمات Security و Privacy دسترسی Accessibility و Screen Recording را به مفسر خود بدهید.
  • تغییر زبان کیبورد: طرح صفحه کلید را ثابت کنید یا در شروع اسکریپت با میانبر سیستم عامل به زبان مورد نظر سوییچ کنید.

مقایسه هدف گیری بر اساس مختصات و تصویر

روش ویژگی ها
مختصات پیکسلی سریع و ساده، بدون نیاز به فایل الگو. وابسته به موقعیت و اندازه پنجره. مناسب سناریوهای ثابت یا تمام صفحه.
تشخیص تصویر مقاوم در برابر جابه جایی پنجره. نیازمند اسکرین شات الگو و تنظیم مقیاس. کمی کندتر. مناسب محیط های پویا.

سازماندهی کد و نگهداری بلندمدت

اسکریپت های کوچک به مرور بزرگ می شوند. برای کنترل پیچیدگی، توابع اتمی بنویسید که یک کار مشخص را انجام دهند و خروجی قابل سنجش برگردانند. پیکربندی مسیرها، تاخیرها و الگوهای تصویری را در یک فایل جداگانه نگه دارید.

import time
import pyautogui as pg

def click_image(path, tries=3, wait=0.8, conf=0.9):
    for _ in range(tries):
        loc = pg.locateOnScreen(path, confidence=conf)
        if loc:
            pg.click(pg.center(loc))
            return True
        time.sleep(wait)
    return False

def type_slow(text, interval=0.05):
    pg.write(text, interval=interval)

# استفاده
if not click_image("login_btn.png"):
    raise SystemExit("ورود در دسترس نیست")
type_slow("user")
pg.press("tab")
type_slow("secret")
pg.press("enter")

برای ثبت رخدادها از ماژول logging استفاده کنید تا بتوانید پس از اجرا علت خطا یا کندی را بررسی کنید. همچنین با تقسیم پروژه به ماژول های کوچک، تست هر قطعه آسان تر می شود.

نکته های کارایی و تجربه بهتر

  • در تطبیق تصویری، اگر فقط بخش کوچکی از صفحه مرتبط است، از پارامتر region استفاده کنید تا سرعت بالا برود.
  • تعداد اسکرین شات ها را کم کنید و آن ها را در صورت امکان برای چند ثانیه کش کنید.
  • از hotkey های برنامه مقصد استفاده کنید. میانبرها نسبت به کلیک روی آیکن ها پایدارتر و سریع تر هستند.
  • حرکت ماوس را با duration کوتاه طبیعی تر کنید تا جریان کار قابل مشاهده و قابل اشکال یابی بماند.
  • برای اجرای زمان بندی شده، اسکریپت را با Task Scheduler یا cron فراخوانی کنید و لاگ خروجی را در فایل ذخیره کنید.

کاربردهای الهام بخش

با چند خط کد می توانید گزارش های روزانه را تولید و بلافاصله در پوشه اشتراکی ذخیره کنید. برای مستندسازی رابط های متغیر، گرفتن اسکرین شات های متوالی از منوها و پنجره ها بسیار کاربردی است.

در آموزش نرم افزار، ساخت دموهای قابل تکرار با حرکت کنترل شده ماوس کمک می کند مراحل به شکل یکنواخت نمایش داده شوند. در تست دستی تقویت شده، می توانید مسیرهای بحرانی رابط کاربری را سریع و قابل اندازه گیری اجرا کنید.

اگر به ابزارهای پیشرفته تری نیاز داشتید، می توانید این کتابخانه را کنار چارچوب های تست رابط کاربری یا پردازش تصویر حرفه ای تر ترکیب کنید و سناریوهای پیچیده تر بسازید.

جمع بندی

این کتابخانه راهی ساده و قابل اعتماد برای خودکارسازی کارهای دسکتاپ ارائه می دهد. با ترکیب حرکت ماوس، کلیک، تایپ، اسکرین شات و تشخیص تصویر می توانید بسیاری از فرایندهای تکراری را به اسکریپت های قابل نگهداری تبدیل کنید. رعایت ایمنی، تاخیرهای سنجیده، تایید بصری و ساختار مناسب کد کلید موفقیت است. اگر به دنبال نقطه شروعی سریع و عملی هستید، استفاده از PyAutoGUI در پایتون گزینه ای کم هزینه و موثر است.