您好,登錄后才能下訂單哦!
一、需求場景:
大量的windows端上使用某公司的代理軟件,不時會出現不可用的情況,多次反饋某公司無果,可又不能不用,只能是定期去重啟一下。
二、想法:
使用Python的pyautogui模塊替代手動登陸。
三、實踐:
1、由于國際鏈路問題,往往不能一次就成功登陸。再打開軟件時和點擊登陸時均可能出現幾次不等的登陸失敗提示,需要點擊OK按鈕確認。
2、程序會嘗試進行五輪的登陸操作(使用對應的階段的圖片),期間檢測到成功登陸則退出。
3、建腳本加入到開機啟動(至于重啟windows的任務就交給Ansible,將再其他文章進行詳細說明)。
# -*- coding: utf-8 -*- import os import time import subprocess import pyautogui def kill_proc(description, proc_name): try: print('終止%s進程...' % (description)) os.system('taskkill /IM %s /F' % (proc_name)) except Exception as reason: print(e) def run_proc(description, proc_name): try: print('啟動%s進程...' % (description)) subprocess.Popen("%s" % (proc_name)) time.sleep(8) except Exception as reason: print('啟動進程失敗!!\n錯誤的原因是:' + str(reason)) os._exit(0) def check_img(description, img_name): try: print('查找%s圖像' % (description)) button = pyautogui.locateOnScreen("%s" % (img_name)) print(button) if description == 'Success': return 1 if button: print('點擊%s圖像' % (description)) button_center = pyautogui.center(button) pyautogui.click(button_center) time.sleep(1) except BaseException: print('沒有找到%s圖像' % (description)) return 0 if __name__ == '__main__': count = 1 kill_proc('911', 'Client.exe') run_proc('911', r'C:\911S5 2018-05-23 fixed\Client.exe') for i in range(5): print('=====進行第%s輪檢查=====' % (count)) count += 1 check_img('OK1', 'C:\\restart911\\error_OK1.PNG') check_img('OK2', 'C:\\restart911\\error_OK2.PNG') check_img('Login', 'C:\\restart911\\Login.PNG') time.sleep(5) if check_img('Success', 'C:\\restart911\\success.PNG'): print('執行成功!!') break
四、運行演示:
五、存在的問題:
有多臺需要運行此腳本,缺少匯總反饋機制。
如果五輪過后還沒登陸上,一般就是登陸不上了,還需要查別的原因,可以將失敗的結果通過郵件發送到管理員郵箱。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。