公司对工单处理的及时性有一定的考察,但工单系统负责人员暂未计划在系统中开发“有工单时发出声音通知”的功能(主要是担心办公室通知声音不停地此起彼伏给大家造成困扰)。于是,我就自己写了这样一个小 Python 程序,每天开机自动运行,登录系统并每隔5分钟检查是否有新的待办任务,如果有新的待办,则蜂鸣通知。
本文已经对相关敏感信息进行模糊处理
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 9 09:32:31 2023
@author: xuwang
"""
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import requests
import time
import re
import win32com.client
import winsound
from bs4 import BeautifulSoup
browser = webdriver.Ie()
browser.get('http://tl.example.com/login.asp')
# 调用IE打开登录网址,如果登录代码不在单独的网页,而是在 iframe 框架里,则需要打开网页后,切换到对应的 frame 中
# browser.switch_to_frame('frame的id')
# 取得本次访问的 cookie
cookiestr = browser.get_cookies()
# 取到的串类似这样: [{'domain': 'tl.example.com', 'httpOnly': False, 'name': 'ASPSESSIONIDQSASDDAQ', 'path': '//', 'secure': False, 'value': 'GGDNFBLBNIKJCLACOEEKPPAO'}]
# headers 中的 Cookie 项类似这样: Cookie: ASPSESSIONIDQSASDDAQ=GGDNFBLBNIKJCLACOEEKPPAO,通过下面两条指令从上面的输出中将相关内容取出来
cookiekey = cookiestr[0]['name']
cookieval = cookiestr[0]['value']
headers = {
'Accept': 'image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-Hans-CN, zh-Hans; q=0.5',
'Connection': 'Keep-Alive',
'Cookie': cookiekey+'='+cookieval,
'Host': 'tl.example.com',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E)'
}
# 输入用户名和密码并点击登录,如果有验证码,则还需要识别并输入验证码
browser.find_element(By.ID, 'user_id').send_keys('1001')
browser.find_element(By.ID, 'user_id').send_keys(Keys.TAB)
browser.find_element(By.ID, 'user_pwd').send_keys('123456')
browser.find_element(By.ID, 'button').click()
while True:
# 请求显示有待办工单数量的页面
url="http://tl.example.com/managepartmid.asp?cxtype=1"
response=requests.get(url,headers=headers)
#response=requests.get(url,headers=headers)
data=response.text
soup=BeautifulSoup(data,"html.parser")
# 将待办工单数值取出来
mgsy=soup.select("#dbnum")[0]
mgsy=str(mgsy)
mgsy=re.sub('[^0-9]',"",mgsy)
mgsy=float(mgsy)
# 如果数值大于0,则蜂鸣告警
if mgsy > 0:
print(mgsy)
winsound.Beep(2015,2000)
# 睡眠5分钟,然后再次循环(检查是否有待办工单)
time.sleep(300)