一、需求
有大屏需要按照配置文件顯示多個(gè)VNC环疼,Chrome琐凭;主要依賴第三方庫如下
configparser#解析ini配置文件
pywinauto#Python自動(dòng)化桌面辦公第三方庫
schedule#Python定時(shí)任務(wù)框架
pyinstaller#用來將Python文件打包成exe
二、前置條件
- VNC可通過CMD如下命令打開之前保存的遠(yuǎn)程地址:
start C:\Program" "Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc
- Chrome可通過如下命令打開對(duì)應(yīng)的界面办素,并設(shè)置位置;Chrome參數(shù)介紹
start C:\Program" "Files\Google\Chrome\Application\chrome.exe www.baidu.com --window-position=100,100 --window-size=300,200 --user-data-dir="C:/temp/Chrome/1"
三、主要類介紹
- autoIt.ini自定義的配置文件祸穷,定義需要打開VNC,還是瀏覽器勺三;
- Props.py與配置文件配套使用的模型類雷滚;
- main.py讀取autoIt.ini配置文件,按照配置文件中的appType打開vnc,還是Chrome吗坚;
- VNC.py打開對(duì)應(yīng)VNC祈远,按照appName(vnc主機(jī)名)設(shè)置位置呆万、大小
- Browser.py打開chrome ,并通過
C:/temp/Chrome/1
設(shè)置每個(gè)網(wǎng)址打開不通的Chrome车份,設(shè)置位置大小
四谋减、具體代碼
- autoIt.ini自定義的配置文件,定義需要打開VNC扫沼,還是瀏覽器出爹;
[section1]
;新的監(jiān)控屏幕叫section1,不可重復(fù)
appCmd =C:\Program Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc
appName =ZS-TEST-98
;appName代表VNC主機(jī)名
appX=100
appY=200
appW=300
appH=200
appTpe=vnc
;appType的取值范圍browser|vnc
[section2]
;新的監(jiān)控屏幕叫section1缎除,不可重復(fù)
appCmd =C:\Program Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc
appName =ZS-TEST-98
appX=400
appY=200
appW=300
appH=200
appTpe=vnc
;appType的取值范圍browser|vnc
[section3]
;新的監(jiān)控屏幕叫section1严就,不可重復(fù)
appCmd =C:\Program Files\Google\Chrome\Application\chrome.exe www.baidu.com
appName =ZS-TEST-99
;瀏覽器appName未使用,可隨意命名
appX=400
appY=400
appW=300
appH=600
appTpe=browser
;appType的取值范圍browser|vnc
[section4]
;新的監(jiān)控屏幕叫section1器罐,不可重復(fù)
appCmd =C:\Program Files\Google\Chrome\Application\chrome.exe www.baidu.com
appName =ZS-TEST-99
appX=700
appY=400
appW=300
appH=600
appTpe=browser
;appType的取值范圍browser|vnc
- Props.py與配置文件配套使用的模型類梢为;
# -*- coding: utf-8 -*-
class Props:
appCmd = "";
appName = "";
appX = 0;
appY = 0;
appW = 0;
appH = 0;
appType = "";#browser|vnc
def __init__(self,appCmd,appName,appX,appY,appW,appH,appType):
self.appCmd = appCmd;
self.appName = appName;
self.appX = appX;
self.appY = appY;
self.appW = appW;
self.appH = appH;
self.appType = appType;
def __str__(self) -> str:
return 'Props (%s, %s, %d,%d,%d,%d,%s)' % (self.appCmd, self.appName,self.appX ,self.appY ,self.appW ,self.appH,self.appType )
- main.py讀取autoIt.ini配置文件,按照配置文件中的appType打開vnc,還是Chrome轰坊;
# -*- coding: utf-8 -*-
import configparser
import schedule
from Browser import Browser
from Props import Props
from VNC import VNC
def readConf():
config = configparser.ConfigParser() # 類實(shí)例化
config.read(r"D:\data\autoIt.ini",encoding="utf8")
sections = config.sections()
props = []
for section in sections:
appCmd = config.get(section, 'appCmd')
appName = config.get(section, 'appName')
appX = int(config.get(section, 'appX'))
appY = int(config.get(section, 'appY'))
appW = int(config.get(section, 'appW'))
appH = int(config.get(section, 'appH'))
appTpe = config.get(section, 'appTpe')
prop = Props(appCmd,appName,appX,appY,appW,appH,appTpe)
props.append(prop)
return props
def Bloom():
props = readConf()
browser = Browser()
app = VNC()
browser.close()
app.close()
i = 0;
for prop in props:
i = i + 1
if (prop.appType == "browser"):
browser.run(prop.appCmd, prop.appX, prop.appY, prop.appW, prop.appH, i)
else:
app.start(prop.appCmd, prop.appName, prop.appX, prop.appY, prop.appW, prop.appH)
if __name__ == "__main__":
Bloom()
schedule.every(1).hours.do(Bloom)
while True:
schedule.run_pending()
- VNC.py打開對(duì)應(yīng)VNC铸董,按照appName(vnc主機(jī)名)設(shè)置位置、大小
# -*- coding: utf-8 -*-
import os
from pywinauto import application
import time
class VNC(object):
"""
pywin framwork main class
tool_name : 程序名稱肴沫,支持帶路徑
windows_name : 窗口名字
"""
SLEEP_TIME = 1
def __init__(self):
"""
初始化方法粟害,初始化一個(gè)app
"""
self.app = application.Application()
def run(self, tool_name):
"""
啟動(dòng)應(yīng)用程序
"""
self.app.start(tool_name)
time.sleep(1)
def max_window(self, window_name):
"""
最大化窗口
"""
self.app[window_name].Maximize()
time.sleep(1)
def move_window(self,window_name,x = None, y = None, width = None, height = None):
self.app[window_name].move_window(x,y,width,height)
time.sleep(1)
def close(self):
os.system(f"taskkill /t /f /im vncviewer.exe")
time.sleep(1)
def start(self,appCmd,appName,appX,appY,appW,appH):
self.run(appCmd)
self.move_window(appName,appX,appY,appW,appH)
if __name__ == "__main__":
app = VNC()
# 啟動(dòng)程序
app.run(r"C:\Program Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc")
app.move_window("ZS-TEST-98",100,200,300,400)
app.close()
- Browser.py打開chrome ,并通過
C:/temp/Chrome/1
設(shè)置每個(gè)網(wǎng)址打開不通的Chrome樊零,設(shè)置位置大小
# -*- coding: utf-8 -*-
import os
import time
from pywinauto import application
class Browser(object):
"""
pywin framwork main class
tool_name : 程序名稱我磁,支持帶路徑
windows_name : 窗口名字
"""
SLEEP_TIME = 1
def __init__(self):
"""
初始化方法,初始化一個(gè)app
"""
self.app = application.Application()
def run(self, tool_name):
"""
啟動(dòng)應(yīng)用程序
"""
self.app.start(tool_name)
time.sleep(1)
def run(self,appCmd,appX,appY,appW,appH,dir):
position = " --window-position="+str(appX)+","+str(appY)
size = " --window-size=" + str(appW) + "," + str(appH)
tmpDir = "C:/temp/Chrome/"+str(dir)
userDir = " --user-data-dir="+tmpDir
self.app.start(appCmd+position+size+userDir)
def close(self):
os.system(f"taskkill /t /f /im chrome.exe")
time.sleep(1)
if __name__ == "__main__":
browser = Browser()
browser.run(r"C:\Program Files\Google\Chrome\Application\chrome.exe www.baidu.com",100,200,300,400,3)
五驻襟、優(yōu)化需求
使用pyinstaller將代碼打包成exe夺艰,實(shí)現(xiàn)點(diǎn)擊exe自動(dòng)運(yùn)行;
- 使用Python虛擬環(huán)境沉衣,好處是可按需安裝依賴庫郁副,避免一些庫無法被打包導(dǎo)致打包失敗豌习;
首先存谎,我們安裝一下pipenv這個(gè)包,方便我們創(chuàng)建虛擬環(huán)境:
pip install pipenv
- 然后執(zhí)行如下命令建立虛擬環(huán)境:
pipenv install
- 接著執(zhí)行如下命令進(jìn)入虛擬環(huán)境:
pipenv shell
- 安裝需要的包
pip install configparser#解析ini配置文件
pip install pywinauto#Python自動(dòng)化桌面辦公第三方庫
pip install schedule#Python定時(shí)任務(wù)框架
pip install pyinstaller#用來將Python文件打包成exe
- 運(yùn)行打包命令
pyinstaller -F main.py
-
打包結(jié)果
在python工程目錄文件夾下生成如下兩個(gè)文件夾肥隆,生成的exe位于dist文件夾下
企業(yè)微信截圖_16414528311025.png - 將exe加入Windows開啟啟動(dòng)項(xiàng)
按下win+r打開Windows運(yùn)行框輸入shell:startup
打開Windows啟動(dòng)項(xiàng)文件夾
企業(yè)微信截圖_16414529054082.png -
將第6步生成的exe右鍵既荚,生成快捷方式,將該快捷方式放入第7步打開的文件夾內(nèi)栋艳,即可實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)
企業(yè)微信截圖_1641453203369.png