Python实现自动打开电脑应用的两种方法及定时执行
本文介绍利用Python实现自动打开电脑应用的两种方案:一是通过pyautogui模拟鼠标双击快捷方式坐标,二是通过os库直接调用可执行文件路径。文章详细讲解了环境配置、坐标获取技巧、代码实现及注意事项,并结合time库实现了定时自动启动功能,适用于网课提醒等场景。
Python自动打开应用的背景与方案概述
由于时间冲突,偶尔可能错过特定的在线课程时段,因此需要实现自动定时启动钉钉(DingDing)的功能。
本文作者为初学者,内容如有不当之处,恳请高手批评指正。
自动打开钉钉应用主要通过以下两种途径实现:
- 第一种方式是通过定位电脑桌面上软件快捷方式的屏幕坐标,利用代码模拟鼠标双击操作来启动程序。
- 第二种方式则是直接获取软件在电脑中的安装路径,通过调用系统命令打开软件。
方法一:基于pyautogui的坐标点击法
具体来看第一种方法的实现步骤:
在Python环境中,需先通过pip install pyautogui安装第三方库。该库提供了pyautogui.position()函数,用于获取当前鼠标指针所在的屏幕坐标。通过多次调用此函数,可以记录任意目标位置的坐标值。
import pyautogui
import time
#循环执行pyautogui.position()获取不同位置坐标
while True:
print("当前鼠标的坐标为:"pyautogui.position())
time.sleep(1)#设置打印的时间间隔
多次执行上述获取坐标的操作,结果如下:

在成功获取目标软件快捷方式的屏幕坐标后,接下来的步骤是模拟鼠标点击动作。
调用pyautogui.click(clicks=2)即可实现鼠标左键双击的效果。
同时,使用pyautogui.moveTo(x,y)函数控制鼠标移动至指定坐标。结合移动与双击操作,即可实现自动打开电脑应用的功能。
import pyautogui
import time
def AutoOpen():
startPosition = (327,164)#鼠标需要移动的位置
endPosition = (306,216)
position=[startPosition,endPosition]
for i in position:
pyautogui.moveTo(i)#控制鼠标移动
pyautogui.click(clicks=2)#实现鼠标双击
time.sleep(3)
if __name__ == '__main__':
AutoOpen()
需要注意的是:该方法在代码编译器窗口最大化或覆盖目标应用图标时无法正常工作,因为此时获取的坐标是编译器内的相对位置而非屏幕绝对坐标。因此,运行脚本时,目标应用图标不能被编译器遮挡,确保点击位置准确无误。
方法二:基于os库的路径启动法
第二种方法的实现细节如下:
首先获取文件的安装路径,定位到后缀为.exe的可执行文件,然后使用os.startfile(Path)函数打开该文件。os库为Python内置库,无需额外安装。示例路径格式为Path=“F:\XXX\XXX.exe”。
import os
Path = r'F:\DingDing\DingtalkLauncher.exe'
os.startfile(Path)
仅需上述几行代码即可完成文件的打开操作。
import pyautogui
import time
import os
def AutoOpen(Path):
os.startfile(Path) #os.startfile()打开外部应该程序,与windows双击相同
pyautogui.moveTo(306, 216)#pyautogui.moveTo()将鼠标移动到指定位置
time.sleep(6)
pyautogui.click(clicks=2)#鼠标点击,实现鼠标双击
if __name__ == '__main__':
Path=r'F:\DingDing\DingtalkLauncher.exe'
AutoOpen()
此方法不涉及鼠标点击模拟,因此对窗口覆盖无特殊要求;但如果后续需要配合点击事件,则需遵循前述不能覆盖目标位置的原则。
定时启动功能的实现逻辑
在实现自动打开功能的基础上,进一步设置定时启动逻辑。
利用time库获取当前系统时间,并设定一个目标启动时间。通过不断对比当前时间与目标时间,当两者一致时触发自动打开操作,从而实现定时自动启动功能。
完整的实现代码如下:
import pyautogui
import time
def open_app(Path):
os.startfile(Path) #os.startfile()打开外部应该程序,与windows双击相同
pyautogui.moveTo(306, 216)#pyautogui.moveTo()将鼠标移动到指定位置
time.sleep(6)
pyautogui.click(clicks=2)#鼠标点击,实现鼠标双击
def AutoOpen():
startPosition = (327,164)
endPosition = (306,216)
position=[startPosition,endPosition]
for i in position:
pyautogui.moveTo(i)
pyautogui.click(clicks=2)
time.sleep(3)
if __name__ == '__main__':
Path=r'F:\DingDing\DingtalkLauncher.exe'
times = "2020-xx-xx xx:xx"#设置需要打开的时间,此时间看自己需求是否精确到秒("2020-xx-xx xx:xx:xx")
while True:
nowtime = time.strftime('%Y-%m-%d %H:%M')
if (times == nowtime):
open_app(Path)
break
else:
print(time.strftime('%Y-%m-%d %H:%M:%S'))
time.sleep(10)
扩展:Python自动化打开网页示例
此外,Python也可用于自动化打开网页,例如通过Selenium配置代理访问特定网站。
from selenium.webdriver.firefox.options import Options as FOptions
from selenium.webdriver.chrome.options import Options as Foptions
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
#firefox设置代理
profile = FirefoxProfile()
# 激活手动代理配置(对应着在 profile(配置文件)中设置首选项)
profile.set_preference("network.proxy.type", 1)
# ip及其端口号配置为 http 协议代理
profile.set_preference("network.proxy.http", "127.0.0.1")
profile.set_preference("network.proxy.http_port", 8080)
# 所有协议共用一种 ip 及端口,如果单独配置,不必设置该项,因为其默认为 False
profile.set_preference("network.proxy.share_proxy_settings", True)
#chrome设置代理
# options = FOptions()
options = FOptions()
chrome_options = webdriver.FirefoxOptions()
chrome_options.add_argument('--proxy-server=http://127.0.0.1:8080')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('disable-infobars')
browser = webdriver.Firefox(executable_path="D:/geckodriver.exe",firefox_profile=profile)
browser.maximize_window()
browser.get('https://account.dianping.com/login?redir=http%3A%2F%2Fwww.dianping.com%2F')
button = browser.find_element_by_xpath('/html/body/div/div[2]/div[5]/span')
button.click()
至此,关于Python实现自动打开电脑应用的示例代码介绍完毕。如需了解更多Python自动操作应用的相关内容,欢迎查阅本站过往文章或继续浏览后续教程,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













