مهدی موسیوند
مهدی موسیوند
خواندن ۶ دقیقه·۴ سال پیش

کتابخانه PyAutoGUI: قسمت اول

بسم الله الرحمن الرحیم

درود؛ مهدی موسیوند هستم و این اولین نوشته من در ویرگول هست! ?


کتابخانه PyAutoGUI
کتابخانه PyAutoGUI

کتابخانه PyAutoGUI چیست؟

کتابخانه PyAutoGUI یکی از کتابخانه های زبان پایتون می باشد که به ما اجازه می دهد تا فرآیند استفاده از موس و کیبورد خود را به صورت خودکار کنترل کنیم. در حال حاضر این کتابخانه در سه سیستم عامل لینوکس، مک و ویندوز قابل استفاده بوده و به هر دو نسخه 2 و 3 پایتون قابل اجراست.

نصب و راه اندازی

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

برای نصب این کتابخانه کافیه دستور زیر را در خط فرمان سیستم اجرا کرده و تا پایان فرآیند نصب صبر کنیم.

pip install pyautogui

تبریک می گویم؛ حالا می توانیم با استفاده از خط زیر آن را فراخوانی کنیم.

>>> import pyautogui

مختصات نقاط در صفحه نمایشگر

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

مختصات نقاط در صفحه نمایشگر
مختصات نقاط در صفحه نمایشگر

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

نکته: مختصات اولین نقطه (در بالا، سمت چپ) از (0 , 0) شروع می شود و نه از (1 , 1). همین موضوع باعث شده تا مختصات آخرین نقطه (در پایین، سمت راست) به جای (1920 , 1080) (ابعاد خود صفحه نمایشگر)، (1919 , 1079) باشد.

برای به دست آوردن ابعاد نمایشگر خود، می توانیم از تابع زیر استفاده کنیم؛ این تابع ابعاد نمایشگر ما را به دست می آورد.

>>> pyautogui.size() (1920, 1080)

همچنین، با استفاده از تابع زیر، می توانیم مختصات نقطه ای که موس در آن جا قرار دارد را به دست آوریم.

>>> pyautogui.position() (187, 567)

در نتیجه اجرای کد بالا، مشاهده می کنیم که هنگام اجرای این کد، موس ما در مختصات X=187 و Y=567 از صفحه نمایشگر قرار دارد.

با استفاده از تابع زیر، می توانیم متوجه شویم که نقطه مورد نظر ما - که مختصات آن را به برنامه می دهیم - در محدوده نمایشگر قرار دارد یا نه؛ این تابع یکی از دو مقدار True یا False را بر می گرداند. به عبارتی دیگر، در صورتی که مختصات داده شده به برنامه داخل بازه صفحه نمایشگر باشد، مقدار True و چنانچه مختصات داده شده به برنامه خارج از ابعاد نمایشگر باشد، مقدار False باز گردانده می شود.

>>> pyautogui.onScreen(0, 0) True >>> pyautogui.onScreen(-90, -10) False

در مورد تابع بالا اگر فرض کنیم که ابعاد نمایشگر ما 1920*1080 پیکسل است؛ با توجه به آخرین نکته ای که گفتم، در این حالت:

>>> pyautogui.onScreen(1920, 1080) False >>> pyautogui.onScreen(1919, 1079) True

حرکت دادن نشانگر موس

حرکت دادن نشانگر موس
حرکت دادن نشانگر موس

برای حرکت دادن نشانگر موس، دو حالت داریم:

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

>>> pyautogui.move(100, 200) >>> pyautogui.move(7, -8) >>> pyautogui.move(-600, 500)

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

>>> pyautogui.moveTo(100, 200) >>> pyautogui.moveTo(None, 200)
نکته: عبارت None در تابع بالا به معنای مقدار قبلی موس می باشد؛ برای مثال اگر فرض کنیم که موس ما در مختصات (hello_x, hello_y) باشد، پس از اجرای خط دوم از کد بالا، موس به مختصات (hello_x, 200)، انتقال داده خواهد شد.

جالب است بدانید، در هر دو حالت بالا می توانیم با دادن یک زمان به برنامه، مدت زمان طول کشیدن هر حرکت را تعیین کنیم! به مثال زیر توجه کنید.

>>> pyautogui.move(100, 200, 4) >>> pyautogui.moveTo(None, 1070, 9)

در کد ها بالا، هر حرکت، به ترتیب 4 ثانیه و 9 ثانیه طول می کشد.

نکته: در صورتی که به برنامه خود زمانی ندهیم، به طور میانگین هر حرکت 0.1 ثانیه طول می کشد.

دراگ اند دراو موس

در اینجا نیز، دو تابع داریم که دقیقا مانند دو تابع قبل کار می کنند:

>>> pyautogui.dragTo(100, 200, button=&quotleft&quot) >>> pyautogui.dragTo(300, 400, 2, button=&quotleft&quot) >>> pyautogui.drag(30, 0, 2, button=&quotright&quot) >>> pyautogui.drag(300, 530, button=&quotmiddle&quot)

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

سرعت موس در حرکت ها

می توانیم با استفاده از یک سری حالات پیشفرض در کتابخانه PyAutoGUI، سرعت حرکت نشانگر موس را تنظیم کنیم؛ برای مثال تعیین کنیم که نشانگر موس، ابتدا با سرعتی کم و در پایان با سرعتی زیاد حرکت کند!

شروعی آهسته با پایانی سریع:

>>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)

شروعی سریع با پایانی آهسته:

>>> pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)

شروع و پایانی سریع با میانه ای آهسته:

>>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)

دو حالت کاملا متفاوت و عجیب که ترجیح می دهم خودتون تست کنید:

>>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce) >>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)

کلیک کردن موس

کلیک کردن موس
کلیک کردن موس


تا الآن یاد گرفتیم که چطور نشانگر موس را حرکت بدهیم یا با آن دراگ اند دراو کنیم. حالا می خواهیم تابعی را معرفی کنیم که امکان کلیک کردن را برای ما فراهم می کند:

>>> pyautogui.click()

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

>>> pyautogui.click(x=100, y=200)

به بیان بهتر:

# Name of this code: A-80 import pyautogui pyautogui.moveTo(700, 200) pyautogui.click()
# Name of this code: B-90 import pyautogui pyautogui.click(700, 200)

به بیان بهتر، کد A-80 با کد B-90 در عمل فرقی ندارد!
پرسش: حالا اگر بخواهیم از سایر کلید های موس استفاده کنیم، چه کار کنیم؟

+ کلیک راست:

>>> pyautogui.click(button=&quotright&quot)

+ کلیک چپ (پیشفرض):

>>> pyautogui.click(button=&quotleft&quot)

+ کلیک میانی:

>>> pyautogui.click(button=&quotmiddle&quot)

پرسش: چجوری می توانم تعداد کلیک ها را مشخص کنم؟ مثلا 5 بار کلیک شود؟ + بله:

>>> pyautogui.click(clicks=5)

پرسش: آیا می توانم بین هر کلیک فاصله بزارم؟ مثلا 0.25 ثانیه؟ + بله:

>>> pyautogui.click(clicks=5, interval=0.25)

+ یک مثال دیگر:

>>> pyautogui.click(button='right', clicks=5, interval=0.25)

کتابخانه PyAutoGUI چند تا تابع دیگر هم برای کلیک کردن دارد؛ این توابع برای تسهیل کردن کار ما هستند:

  • دابل کلیک:
>>> pyautogui.doubleClick()
  • تریپل کلیک:
>>> pyautogui.tripleClick()
  • رایت کلیک:
>>> pyautogui.rightClick()

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

توابع mouseDown و mouseUp

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

>>> pyautogui.mouseDown(button='left') >>> pyautogui.mouseUp(button=&quotleft&quot, x=100, y=200)

در مثال بالا ابتدا کلید چپ موس نگه داشته شده و بعد از انتقال موس به مختصات X=100 و Y=200، آزاد می شود.

اسکرول کردن موس

اسکرول کردن موس
اسکرول کردن موس

بالاخره به آخرین تابع از توابع کنترل موس رسیدیم، اسکرول! به مثال زیر توجه کنید.

>>> pyautogui.scroll(100) >>> pyautogui.scroll(-400)

در صورتی که به تابع عددی مثبت بدهید، اسکرول به سمت بالا و در صورتی که عددی منفی بدهید، اسکرول به سمت پایین حرکت می کند. لازم به ذکر است، عددی که به این تابع می دهیم به واحد پیکسل می باشد.

همچنین در سیستم عامل های لینوکس و مک می توانیم برای اسکرول افقی از این تابع استفاده کنیم:

>>> pyautogui.hscroll(100) >>> pyautogui.hscroll(-400)

کتابخانه PyAutoGUI تابع دیگری را نیز، برای اسکرول عمودی معرفی کرده که در اجرا فرقی با تابع اصلی ندارد:

>>> pyautogui.vscroll(100) >>> pyautogui.vscroll(-400)

قسمت اول به پایان رسید! دوست دارم نظرات، انتقادات و پیشنهاداتتون رو بدونم؛ اگر سوالی داشتید یا به مشکلی برخوردید حتما به من بگید تا اگر تونستم، کمکتون کنم. ? ان شا الله، این مقاله دو یا سه قسمت دیگر هم خواهد داشت، پس نظرات شما برای بهبود این نوشته بسیار بسیار مهم هست! موفق باشید؛ یا حق.

Ways to communicate with me:
* E-mail: MahdiMoosivand@outlook.com
* Gap: @MahdiMoosivand
Translated by Mahdi Moosivand.
Click here to view the original documentation.
اللهم صل علی محمد و آل محمد و عجل فرجهم. :)

https://virgool.io/@MahdiMoosivand/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-pyautogui-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-tvtpylc7k6iu
برنامه نویسی پایتونکتابخانه pyautoguiکنترل خودکار موس و کیبوردpyautoguiپایتون
شاید از این پست‌ها خوشتان بیاید