Wednesday, December 2, 2015

Chương I: Lập trình auto đơn giản với Sikuli - Bài 6: Giám sát màn hình

Sikuli có thể được sử dụng với việc giám sát màn hình. Trong bài hướng dẫn này, chúng tôi sẽ giới thiệu một vài đoạn Scripts đơn giản có khả năng theo dõi và thông báo cho chúng ta khi một sự kiện xuất hiện trên màn hình.

1.Ứng dụng trên Facebook:

 
Ví dụ đầu tiên của chúng ta là tạo một ứng dụng Facebook kiểm tra định kỳ New Feed xem một người bạn nào đó vừa cập nhật trạng thái facebook. Một cách đơn giản để thực hiện việc này là tìm kiếm hình ảnh đại diện của người bạn đó trên New Feed của bạn. Nếu tìm thấy thì chắc chắn người bạn đó vừa cập nhật trạng thái Facebook. Còn không thì ta sẽ lặp lại điều đó sau 1 khoảng thời gian nhỏ.

Chúng ta hãy cùng thực hiện với vòng lặp while. Đầu tiên, chúng ta cần chụp lại ảnh đại diện của người bạn đó


Để kiểm tra xem ảnh đại diên này có xuất hiện trên màn hình hay không chúng ta sử dụng hàm exists(), nó sẽ trả về True nếu tìm thấy đối tượng. Chúng ta sẽ thiết lập để vòng lặp while chỉ dừng lại khi tìm thấy đối tượng. Chúng ta thêm lện sleep() vào thân vòng lặp để dừng 5 giây giữa mỗi lần tìm kiếm ảnh.







Hoặc chúng ta có thể dùng hàm wait() để kiểm tra màn hình đến khi bức ảnh xuất hiện. Để sử dụng wait() chúng ta cần dùng dòng lệnh:

 



Sử dụng hằng FOREVER có nghĩa là Sikuli sẽ thực hiện vô thời hạn. Nếu bạn không muốn như vậy, bạn có thể thay thế FOREVER bằng số tương ứng với số giây đến khi Sikuli bỏ qua câu lệnh.





Sau khi thoát khỏi vòng lệnh while hoặc câu lệnh đợi. Bạn cần sử dụng hàm popup() để hiển thị một thông báo.



Thông báo sẽ hiển thị như hình dưới đây:








Bây giờ bạn đã có thể chạy chương trình này, thư giãn và tận hưởng thành quả.

2.Ứng dụng trên Skype:

Trong ví dụ trước, chúng ta đã viết chương trình để phát hiện sự xuất hiện của hình ảnh. Còn trong ví dụ lần này, chúng ta sẽ làm ngược lại - phát hiện sự biến mất của một hình ảnh.  

Skype là một công cụ tuyệt vời cho phép chúng ta có thể liên lạc với bạn bè người thân mà không quan ngại vấn đề khoảng cách địa lý. Tuy nhiên, trong một số trường hợp bạn không muốn một người nào đó thấy bạn trực tuyến. Trong khi Skype cung cấp cho chúng ta chức năng thông báo khi một người bạn trực tuyến nhưng lại không có chức năng ngược lại.

Một chương trình tự đông thông báo khi người bạn đó đăng xuất sẽ có ích trong trường hợp này. Bây giờ chúng ta hãy xây dựng công cụ đó bằng Sikuli Scripts. Như chúng ta đã biết, khi một tài khoản không còn trực tuyến thì biểu tượng đám mây màu xanh cũng sẽ không còn xuất hiện. Như vậy chúng ta có thể chụp lại bức ảnh có biểu tượng xanh lá cây và tên của người bạn đó.









Tiếp đó, chúng ta có thể có thể viết một Sikuli Scripts để duyệt sự biến mất của hình ảnh đó.









Scripts này cũng tương tự với ví dụ trước.Điều duy nhất khác biệt là bỏ câu lệnh Not phía trước điều kiện để dừng vòng lặp, do đó điều ta tạo là điều ngược lại với ví dụ trước.

Một cách khác để chờ khi đối tượng biến mất là sử dụng hàm waitVanish(). Scripts trên có thể được viết lại như sau:






3.Thông báo khi xe bus đến:

Ở ví dụ thứ 3 này, chúng tôi sẽ hướng dẫn các bạn xây dựng công cụ thông báo khi xe bus tới. Thay vì kiên nhẫn đứng bên ngoài bất chấp gió lạnh hay nắng nóng, bạn có thể ngồi trước máy tính. Bạn chỉ cần nhìn vào bản đồ mỗi vài phút để kiểm tra vị trí của xe bus. Khi xe bus tới đủ gần bạn chỉ việc đi bộ ra điểm dừng.

Thay vì cứ vài phút lại phải kiểm tra một lần, chúng ta có thể thu nhỏ cửa sổ bản đồ và mở một cửa sổ khác để đọc báo.

Chúng ta hãy viết một chương trình để theo dõi vị trí của xe bus. Nó có thể xác định một khu vực và yêu cầu Sikuli chỉ tìm kiếm trên khu vực đó. Bằng cách này, Sikuli sẽ không lãng phí thời gian tính toán để quét toàn bộ màn hình.Để làm điều đó, hãy click nút Region trên thanh công cụ.

Toàn bộ màn hình sẽ đậm hơn tương tự như lúc chúng ta chụp màn hình. Tiếp theo bạn chi cần vẽ một hình chữ nhật bao gồm toàn bản đồ. Các khu vực được bao phủ này là phần của màn hình và được đánh dấu màu đỏ trong hình.
   
Tiếp theo chúng ta chụp lại biểu tượng xe bus để theo dõi.

Bây giờ bạn có thể viết một Scripts để kiểm tra xem biểu tượng có xuất hiện trên bản đồ hay không?

Vòng lặp while sẽ dừng khi biểu tượng xe bus xuất hiện trên khu vực đỏ ở màn hình. Mỗi lần quét cách nhau 5 giây. Vòng lặp kết thúc sẽ gửi một thông báo nhắc cho bạn rằng chuyến xe bus đã đến gần.

Một lần nữa, bạn có thể sử dụng lệnh wait() để thay thế cho vòng lặp:
Bài tiếp theo chúng tôi sẽ hướng dẫn các bạn cách điều khiển thanh kéo trên trình duyệt và cửa sổ.

 
 
 
 

3 comments: