Sikuli – Thực hiện công việc tự động với độ chính xác cao

Hồi xưa, mỗi lần ra tiệm Net là tôi phải cài đặt một số phần mềm. Quá trình nhàm chán này xảy ra nhiều đến nỗi tôi nhắm mắt cài cũng được. Máu dê nổi lên, à nhầm, máu lười nổi lên, tôi tự hỏi : Tại sao mình không để máy tính tự động làm tất cả các hành động này ? Ý tôi muốn là mỗi lần tôi cắm USB vào máy tính và chạy một tập tin…gì đó, máy tính sẽ tự động cài đặt IDM, sau khi cài xong nó tự động c**ck luôn và tôi chỉ việc ngồi nhìn.

Trước tới giờ, tôi chỉ biết có 2 loại phần mềm có thể giúp tôi làm được chuyện này :

– Loại thứ nhất sẽ ghi lại vị trí của trỏ chuột trên màn hình hoặc ghi lại các phím tắt rồi sau đó thực hiện “y chang” những gì mà nó “học” được -> Loại này là “chuối” nhất bởi vì nó dựa vào tọa độ màn hình, do đó một số máy sẽ chạy đúng, một số máy sẽ chạy loạn xạ. Nếu sử dụng phím tắt thì đỡ hơn nhưng không phải ứng dụng nào cũng hỗ trợ phím tắt.

– Loại thứ hai là điều khiển trực tiếp các đối tượng trong ứng dụng đó với sự trợ giúp của phần mềm AutoIt. Ví dụ bạn muốn chuột tự động bấm vào nút “Next” thì AutoIt sẽ giúp bạn lấy được nút “Next” dựa vào ID của nó (tất cả các thành phần trong một ứng dụng Windows đều có một ID duy nhất), sau đó bạn sẽ truyền lệnh “bấm” cho cái nút Next. Kết quả là nút Next được bấm trong khi bạn không hề đụng tay đến con chuột. Loại này yêu cầu bạn phải biết một chút về lập trình căn bản nhưng bù lại kết quả rất khả quan và chạy được trên nhiều máy tính khác nhau.

Hôm nay, tôi giới thiệu loại thứ ba và cũng là loại “độc” nhất : tìm và thực hiện hành động dựa vào hình ảnh của đối tượng. Ví dụ : tôi muốn trỏ chuột tự động bấm vào nút “Next” thì tôi chỉ việc truyền vào hành động “Click” tấm hình của nút Next ! :v_wassat:

Sikuli, một phần mềm miễn phí, sẽ giúp bạn làm được chuyện này.

Cách sử dụng phần mềm :

1. Ở cột bên tay trái, hãy bấm chọn một trong các hành động được định nghĩa sẵn. Ví dụ như là hành động bấm chuột trái (click), bấm chuột phải (rightClick), đợi (wait)….
2. Sau khi bạn chọn xong hành động, ngay lập tức Sikuli sẽ chuyển sang chế độ chụp ảnh màn hình để bạn chụp đối tượng cần được thực hiện hành động.

Vậy là xong. Vấn đề ở đây là bạn phải đảm bảo rằng tấm hình (hay nói cách khác là dấu hiệu nhận biết) mà bạn chụp sẽ không bị thay đổi khi chạy ở các máy khác hoặc ngay chính máy tính của bạn. Lưu ý rằng tọa độ click chuột là tâm của tấm hình mà bạn chụp.

Ví dụ tôi muốn tự động mở Firefox và truy cập vào anhhangxomonline.net thì toàn bộ hành động sẽ như hình sau :

Sikuli - Thực hiện công việc tự động với độ chính xác cao

Theo như mô tả trong hình thì bạn có thể thấy thứ tự các bước :
– Tìm trên màn hình biểu tượng của firefox và nhấp đúp chuột vào đó.
– Đợi trong vòng 20 giây hoặc cho đến khi firefox khởi động xong. Dấu hiệu nhận biết chính là mấy cái icon ở cuối thanh addresss.
– Bấm vào thanh address. Dấu hiệu nhận biết thanh address chính là 3 cái icon tương tự ở bên trên. Để khỏi bấm chuột nhầm vào các icon thì tôi chụp một tấm hình hơi dài sao cho tâm của tấm hình không đụng đến các icon.
– “Dán” đoạn text “anhhangxomonline.net” vào thanh address.
– Bấm vào biểu tượng nút “Go” trên thanh address.

Một phần quan trọng trong chuỗi hành động chính là đợi (wait). Khi bạn nhấp đúp chuột vào biểu tượng firefox thì bạn phải cho chương trình biết là hãy đợi cho đến khi trên màn hình xuất hiện dấu hiệu này (dấu hiệu chứng tỏ ứng dụng bạn vừa chạy đã khởi động xong). Bạn nên tìm một dấu hiệu chung nhất và duy nhất trên màn hình nếu ứng dụng đó chạy.

Để chạy thử thì bạn bấm nút “Run” trên thanh công cụ. Trong một số trường hợp, bạn không thể sử dụng tính năng tự chụp hình của chương trình thì bạn hãy tự sử dụng công cụ Paint của Windows để chụp và đưa vào chương trình bằng nút lệnh “Insert Image” trên thanh công cụ.

Bạn có thể tải về file project mà tôi tạo để chạy thử trên máy bạn xem có chính xác hay không nhé. Tải về tại đây. Điều kiện để chạy là bạn hãy tạo một shortcut của Firefox trên desktop, khi chương trình chạy, nếu bạn có thể thấy biểu tượng firefox thì chương trình cũng sẽ thấy và chạy được.

Bạn giải nén file tải về, mở Sikuli lên > vào File > Open và chọn thư mục vừa giải nén > bạn sẽ không thấy tập tin nào hiện ra trong thư mục đó nhưng kệ nó, cứ bấm nút Open là được.

Tiếc một điều là Sikuli không (hoặc chưa) biên dịch đoạn mã bạn tạo ra file tự chạy được nên bạn cần phải chạy thông qua chương trình, hơi bất tiện.