Tài liệu lập trình tự động với PyAutoGUI trong Python

1. Giới thiệu

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng PyAutoGUI thư viện bằng Python 3. PyAutoGUI cung cấp hỗ trợ đa nền tảng để quản lý hoạt động của chuột và bàn phím thông qua mã để cho phép tự động hóa các tác vụ. Các pyautogui cũng có sẵn cho Python 2; tuy nhiên, chúng tôi sẽ sử dụng Python 3 trong suốt quá trình hướng dẫn này.

PyAutoGUI

Một công cụ như thế này có nhiều ứng dụng, một số ứng dụng bao gồm chụp ảnh màn hình, tự động kiểm tra GUI (như Selenium), tự động hóa các tác vụ chỉ có thể được thực hiện với GUI, v.v.

Trước khi bạn tiếp tục với hướng dẫn này, hãy lưu ý rằng có một số điều kiện tiên quyết. Bạn phải có hiểu biết cơ bản về cú pháp của Python hoặc ít nhất đã thực hiện lập trình ở cấp độ mới bắt đầu bằng một số ngôn ngữ khác. Ngoài ra, hướng dẫn này khá đơn giản và dễ làm theo cho người mới bắt đầu.

2. Cài đặt

Quá trình cài đặt cho PyAutoGUI khá đơn giản cho tất cả các Hệ điều hành. Tuy nhiên, có một số phụ thuộc cho Mac và Linux cần được cài đặt trước khi PyAutoGUI có thể được cài đặt và sử dụng trong các chương trình.

2.1. Hệ điều hành Windows

Trong Windows, PyAutoGUI không có phụ thuộc. Chỉ cần chạy lệnh sau trong dấu nhắc lệnh của bạn và quá trình cài đặt sẽ được thực hiện.

$ pip install PyAutoGUI

2.2. Hệ điều hành Mac

Đối với Mac, pyobjc-corepyobjcs là cần thiết để được cài đặt theo trình tự trước tiên. Dưới đây là các lệnh mà bạn cần chạy theo trình tự trong thiết bị đầu cuối của mình để cài đặt thành công:

$ pip3 install pyobjc-core
$ pip3 install pyobjc
$ pip3 install pyautogui

2.3. Hệ điều hành Linux

Đối với Linux, sự phụ thuộc duy nhất là python3-xlib (dành cho Python 3). Để cài đặt điều đó, tiếp theo là pyautoguihãy chạy hai lệnh được đề cập bên dưới trong thiết bị đầu cuối của bạn:

$ pip3 install python3-xlib
$ pip3 install pyautogui

3. Ví dụ về mã cơ bản

Trong phần này, chúng tôi sẽ đề cập đến một số chức năng được sử dụng phổ biến nhất từ PyAutoGUI.

3.1. Các chức năng chung

3.1.1. Chức năng position ()

Trước khi chúng ta có thể sử dụng PyAutoGUI, chúng tôi cần nhập nó vào chương trình của mình:

import pyautogui as pag

Cái này position() cho chúng tôi biết vị trí hiện tại của con chuột trên màn hình của chúng tôi:

pag.position()

Output:

Point (x = 643, y = 329)

3.1.2. Hàm onScreen ()

Các onScreen() cho chúng tôi biết liệu điểm có tọa độ x và y có tồn tại trên màn hình hay không:

print(pag.onScreen(500, 600))
print(pag.onScreen(0, 10000))

Output:

True
False

Ở đây chúng ta có thể thấy rằng điểm đầu tiên tồn tại trên màn hình, nhưng điểm thứ hai nằm ngoài kích thước của màn hình.

3.1.3. Hàm size ()

Các size() tìm chiều cao và chiều rộng (độ phân giải) của màn hình.

pag.size()

Output:

Size (width = 1440, height = 900)

Đầu ra của bạn có thể khác và sẽ phụ thuộc vào kích thước màn hình của bạn.

3.2. Các thao tác chuột phổ biến

Trong phần này, chúng tôi sẽ đề cập đến PyAutoGUI cho thao tác chuột, bao gồm cả việc di chuyển vị trí của con trỏ cũng như tự động nhấp vào các nút thông qua mã.

3.2.1. Hàm moveTo ()

Cú pháp của moveTo() là như sau:

pag.moveTo(x_coordinate, y_coordinate)

Giá trị của x_coordinate tăng từ trái sang phải trên màn hình và giá trị của y_coordinate tăng từ trên xuống dưới. Giá trị của cả hai x_coordinatey_coordinate ở góc trên cùng bên trái của màn hình là 0.

pag.moveTo(0, 0)
pag.PAUSE = 2
pag.moveTo(100, 500)
pag.PAUSE = 2
pag.moveTo(500, 500)

Trong đoạn mã trên, trọng tâm chính là moveTo() di chuyển con trỏ chuột trên màn hình dựa trên tọa độ mà chúng tôi cung cấp dưới dạng tham số. Tham số đầu tiên là tọa độ x và tham số thứ hai là tọa độ y. Điều quan trọng cần lưu ý là các tọa độ này đại diện cho vị trí tuyệt đối của con trỏ.

Một điều nữa đã được giới thiệu trong đoạn mã trên là PAUSE bất động sản; Về cơ bản, nó sẽ tạm dừng việc thực thi tập lệnh trong một khoảng thời gian nhất định. Các PAUSE thuộc tính đã được thêm vào đoạn mã trên để bạn có thể thấy việc thực thi hàm; nếu không, các chức năng sẽ thực thi trong tích tắc và bạn sẽ không thể thực sự thấy con trỏ di chuyển từ vị trí này sang vị trí khác trên màn hình.

Một giải pháp khác cho điều này là chỉ ra thời gian cho mỗi moveTo() hoạt động như tham số thứ ba trong hàm, ví dụ: moveTo(x, y, time_in_seconds).

Việc thực thi tập lệnh trên có thể dẫn đến lỗi sau:

Note: Possible Error

Traceback (most recent call last):
  File "a.py", line 5, in <module>
    pag.moveTo (100, 500)
  File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 811, in moveTo
    _failSafeCheck()
  File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 1241, in _failSafeCheck
    raise FailSafeException ('PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.')
pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.

Nếu việc thực hiện moveTo() tạo ra lỗi tương tự như lỗi được hiển thị ở trên, điều đó có nghĩa là tính năng an toàn không hoạt động của máy tính của bạn đã được bật. Để tắt tính năng an toàn không hoạt động, hãy thêm dòng sau vào đầu mã của bạn:

pag.FAILSAFE = False

Tính năng này được bật theo mặc định để bạn có thể dễ dàng ngừng thực thi pyautogui bằng cách di chuyển chuột đến góc trên bên trái của màn hình theo cách thủ công. Khi con chuột ở vị trí này, pyautogui sẽ ném một ngoại lệ và thoát.

3.2.2. Hàm moveRel ()

Tọa độ của moveTo() là tuyệt đối. Tuy nhiên, nếu bạn muốn di chuyển vị trí chuột so với vị trí chuột hiện tại, bạn có thể sử dụng moveRel().

Điều này có nghĩa là điểm tham chiếu cho hàm này, khi di chuyển con trỏ, sẽ không phải là điểm trên cùng bên trái trên màn hình (0, 0), mà là vị trí hiện tại của con trỏ chuột. Vì vậy, nếu con trỏ chuột của bạn hiện đang ở điểm (100, 100) trên màn hình và bạn gọi moveRel() những thông số (100, 100, 2) vị trí mới của con trỏ di chuyển của bạn sẽ là (200, 200).

Bạn có thể dùng moveRel() như hình bên dưới:

pag.moveRel(100, 100, 2)

Tập lệnh trên sẽ di chuyển con trỏ 100 điểm sang phải và 100 điểm xuống trong 2 giây, đối với vị trí con trỏ hiện tại.

3.2.3. Hàm click ()

Các click() được sử dụng để bắt chước các thao tác nhấp chuột. Cú pháp cho click() là như sau:

pag.click(x, y, clicks, interval, button)

Các thông số được giải thích như sau:

  • x: tọa độ x của điểm cần tiếp cận
  • y: tọa độ y của điểm cần tiếp cận
  • clicks: số lần nhấp bạn muốn thực hiện khi con trỏ đến điểm đó trên màn hình
  • interval: khoảng thời gian tính bằng giây giữa mỗi lần nhấp chuột, tức là nếu bạn đang thực hiện nhiều lần nhấp chuột
  • button: chỉ định nút nào trên chuột bạn muốn nhấn khi con trỏ đến điểm đó trên màn hình. Các giá trị có thể là right, leftmiddle.

4. Trực quan hóa dữ liệu bằng Python

Hình ảnh hóa dữ liệu bằng Python, một khóa học dành cho các nhà phát triển Python mới bắt đầu đến trung cấp, sẽ hướng dẫn bạn thao tác dữ liệu đơn giản với Pandas, bao gồm các thư viện vẽ sơ đồ cốt lõi…

4.1. Thao tác với chuột

pag.click(100, 100, 5, 2, ‘right’)

Bạn cũng có thể thực hiện các chức năng nhấp chuột cụ thể như sau:

pag.rightClick(x, y)
pag.doubleClick(x, y)
pag.tripleClick(x, y)
pag.middleClick(x, y)

Đây xy đại diện cho xy tọa độ, giống như trong các hàm trước đó.

Bạn cũng có thể kiểm soát chi tiết hơn các lần nhấp chuột bằng cách chỉ định thời điểm nhấn chuột xuống và khi nào thả chuột lên. Điều này được thực hiện bằng cách sử dụng mouseDownmouseUps, tương ứng.

Đây là một ví dụ ngắn gọn:

pag.mouseDown(x=x, y=y, button='left')
pag.mouseUp(x=x, y=y, button='left')

Đoạn mã trên tương đương với việc chỉ thực hiện một pag.click(x, y).

Chức năng chuột cuối cùng mà chúng ta sẽ đề cập đến là scroll. Như mong đợi, nó có hai tùy chọn: cuộn lên và cuộn xuống. Cú pháp cho scroll() là như sau:

pag.scroll(amount_to_scroll, x=x_movement, y=y_movement)

Để cuộn lên, hãy chỉ định một giá trị dương cho amount_to_scrollvà để cuộn xuống, hãy chỉ định một giá trị âm. Đây là một ví dụ:

pag.scroll(100, 120, 120)

Được rồi, đây là nó cho các chức năng của chuột. Bây giờ, bạn sẽ có thể điều khiển các nút của chuột cũng như các chuyển động thông qua mã. Bây giờ chúng ta hãy chuyển sang các chức năng bàn phím. Có rất nhiều, nhưng chúng tôi sẽ chỉ đề cập đến những thứ được sử dụng thường xuyên nhất.

4.2. Thao tác với bàn phím

Trước khi chúng ta chuyển đến các chức năng, điều quan trọng là chúng ta biết các phím nào có thể được nhấn thông qua mã trong pyautogui, cũng như quy ước đặt tên chính xác của chúng. Để làm như vậy, hãy chạy tập lệnh sau:

print(pag.KEYBOARD_KEYS)['t', 'n', 'r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']

4.2.1. Hàm typewrite ()

Các typewrite() được sử dụng để gõ một cái gì đó trong một trường văn bản. Cú pháp của hàm như sau:

pag.typewrite(text, interval)

Đây text là những gì bạn muốn nhập vào trường và interval là thời gian tính bằng giây giữa mỗi hành trình phím. Đây là một ví dụ:

pag.typewrite('Junaid Khalid', 1)

Việc thực thi tập lệnh ở trên sẽ nhập văn bản “Junaid Khalid” vào trường hiện đang được chọn với thời gian tạm dừng 1 giây giữa mỗi lần nhấn phím.

Một cách khác mà chức năng này có thể được sử dụng là chuyển vào danh sách các phím mà bạn muốn nhấn theo một trình tự. Để làm điều đó thông qua mã, hãy xem ví dụ bên dưới:

pag.typewrite(['j', 'u', 'n', 'a', 'i', 'd', 'e', 'backspace', 'enter'])

Trong ví dụ trên, văn bản junaide sẽ được nhập, sau đó là xóa dấu e. Đầu vào trong trường văn bản sẽ được gửi bằng cách nhấn Enter.

4.2.2. Hàm hotkey ()

Nếu bạn chưa nhận thấy điều này cho đến nay, các phím chúng tôi đã hiển thị ở trên không có đề cập cho các hoạt động kết hợp như Control + C cho lệnh sao chép. Trong trường hợp bạn đang nghĩ rằng bạn có thể làm điều đó bằng cách chuyển danh sách [‘ctrl’, ‘c’] đến typewrite(), bạn sai rồi. Các typewrite() sẽ nhấn cả hai nút đó theo một trình tự, not đồng thời. Và như bạn có thể đã biết, để thực hiện lệnh sao chép, bạn cần nhấn C trong khi giữ ctrl.

Để nhấn đồng thời hai hoặc nhiều phím, bạn có thể sử dụng hotkey()như được hiển thị ở đây:

pag.hotkey('shift', 'enter')
pag.hotkey('ctrl', '2' ) # For the @ symbol
pag.hotkey('ctrl', 'c')  # For the copy command

4.2.3. Chức năng chụp màn hình ()

Nếu bạn muốn chụp ảnh màn hình bất kỳ lúc nào, screenshot() là một trong những bạn đang tìm kiếm. Hãy xem cách chúng ta có thể triển khai điều đó bằng cách sử dụng PyAutoGUI:

scree_shot = pag.screenshot() # to store a PIL object containing the image in a variable

Điều này sẽ lưu trữ một PIL đối tượng chứa hình ảnh trong một biến.

Tuy nhiên, nếu bạn muốn lưu trữ ảnh chụp màn hình trực tiếp vào máy tính của mình, bạn có thể gọi screenshot thay vào đó như thế này:

pag.screenshot('ss.png')

Thao tác này sẽ lưu ảnh chụp màn hình trong một tệp, với tên tệp đã cho, trên máy tính của bạn.

4.2.4. Các hàm xác nhận (), alert () và prompt ()

Tập hợp các chức năng cuối cùng mà chúng ta sẽ trình bày trong hướng dẫn này là các chức năng hộp thư. Đây là danh sách các chức năng hộp thư có sẵn trong PyAutoGUI:

  1. Hộp xác nhận: Hiển thị thông tin và cung cấp cho bạn hai tùy chọn tức là OKCancel
  2. Hộp thông báo: Hiển thị một số thông tin và để xác nhận rằng bạn đã đọc nó. Nó hiển thị một nút duy nhất tức là OK
  3. Hộp nhắc nhở: Yêu cầu một số thông tin từ người dùng và khi nhập, người dùng phải nhấp vào OK

Bây giờ chúng ta đã thấy các loại, hãy xem cách chúng ta có thể hiển thị các nút này trên màn hình theo trình tự như trên:

pag.confirm("Are you ready?")
pag.alert("The program has crashed!")
pag.prompt("Please enter your name: ")

5. Kết luận

Trong bài viết này, chúng ta đã học cách sử dụng PyAutoGUI thư viện tự động hóa bằng Python. Sau khi làm theo bài viết này, bạn sẽ có thể sử dụng PyAutoGUI để tự động hóa các hoạt động GUI cho các tác vụ lặp đi lặp lại trong ứng dụng của riêng bạn.

Tham khảo tài liệu về PyAutoGUI ở địa chỉ sau: https://pyautogui.readthedocs.io/en/latest/

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *