python+selenium+apscheuler实现微信定时发信息
生活随笔
收集整理的這篇文章主要介紹了
python+selenium+apscheuler实现微信定时发信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景
在工作中每天下班前都需要在公司的報工系統中進行工作日志的記錄。但是有很多同事常常都會忘記報工 。 這種現象也讓我們組長感到頭疼,也每天在群里面催。就上述問題,我就想能不能每天定時的通知大家報工呢?也因為自己正在學習python知識,所以就用python+itchat+selenium+apscheduler來實現微信群的定時通知,來通知大家每天準時報工。
準備
由于使用的是linux系統來運行python程序,所以這里先準備好python在linux系統運行的環境。
1. python安裝:
2. 相應的python庫安裝:
使用的python庫有:requests, selenuim, wxpy, apscheduler, itchat 由于在linux上沒有直接安裝這些包的工具,所以先在系統上安裝pip, 這樣使得我們 安裝python庫時更方便。下面簡單描述安裝pip的過程:yum install -y epel-release #先安裝epel源 yum install -y python-pip # 接著安裝pip pip install --upgrade pip # 更新pip到最高版本安裝好pip后,以上的python,直接使用:pip insatll [對應的庫名] 進行安裝 如:pip install requests3. phantomjs安裝
由于需要使用phantomjs進行全屏截圖,所以要在linux系統進行安裝
代碼實現
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf8') # 設置默認編碼格式為'utf-8' from selenium import webdriver as wb import time from wxpy import * from apscheduler.schedulers.blocking import BlockingScheduler import requests# 登錄客戶端,這里沒有直接使用itchat,而是使用了wxpy,原理差不多。 # cache_path=True :緩存掃碼登錄的信息,短時間登錄不需要重新掃碼。 # console_qr=2 :在linux系統中顯示二維碼。 bot = Bot(cache_path=True, console_qr=2) # itchat.auto_login() # itchat.run()# 獲取金山詞霸每日一句,英文和翻譯 # 報工前發一波雞湯文。 def get_news():try:url = "http://open.iciba.com/dsapi"r = requests.get(url)contents = r.json()['content']translation = r.json()['translation']return contents, translationexcept Exception as e:return '采集雞湯的程序掛啦!今天沒有雞湯,但還是要報工喲.^-^.'def screenshots():'''獲取jira上團隊工作日志信息,保存為圖片,獲取失敗返回失敗信息:return:'''try:url = 'http://xxx.xxx.xxx.xxx:9990/secure/deskDomainAction!mainpage.jspa'# drive = wb.Chrome()driver = wb.PhantomJS()driver.implicitly_wait(30)driver.get(url)print '進入登錄頁面'user_name = driver.find_element_by_id('login-form-username')user_name.clear()user_name.send_keys('xxx')pwd = driver.find_element_by_id('login-form-password')pwd.clear()pwd.send_keys('xxxx')submit = driver.find_element_by_id('login-form-submit')submit.click()print '登錄成功'# 獲取當前句柄current_handle = driver.current_window_handle# print(current_handle)# 登錄后,進入工作日志界面driver.find_element_by_link_text('工作日志').click()# 獲取所有的句柄handles = driver.window_handles# print(handles)# 進入第二個句柄,由于界面重新打開了另一個窗口,截圖內容在新的窗口driver.switch_to_window(handles[1])# 保存截圖driver.get_screenshot_as_file('./test.png')print '截圖成功!'time.sleep(2)driver.quit()except Exception as e:print u'獲取工作日志圖片失敗!'driver.quit()return '截圖程序掛啦!今天沒圖看了,但還是要準時報工喲!!'def sendMsg(data):'''發送群消息'''# 獲取需要發送信息的群group = bot.groups().search(u'test')[0]group.send(u'@報工一刻@') # 發送固定信息group.send(data) # 發送雞湯# 如果截圖失敗,發送固定的文字內容。try:group.send_image('./test.png') # 發送圖片except:group.send(u'截圖程序掛啦!今天沒圖看了,但還是要準時報工喲!!')group.send(u'沒報工的趕緊了喂!0..0!')def job():'''定時器執行的函數:return:'''# 獲取每日newsnews = get_news()# # 獲取截圖# msg = screenshots()# 發送信息sendMsg(news[0]+'\n'+news[1])# 創建調度器,周一到周五,每天17:50 發送報工信息 scheduler = BlockingScheduler() # scheduler.add_job(job, 'cron', day_of_week='1-5', hour=17, minute=50) scheduler.add_job(job, 'interval', seconds=30) scheduler.start()bot.join() #保證上述代碼持續運行踩的坑
1.截圖后,圖片中的中文亂碼問題。
解決方法:
2.二維碼在終端顯示過大問題。
由于筆記本屏幕過小,登錄時,顯示的二維碼過大,需要下拉,這時需要調整程序中 Bot類的參數:console_qr = 1,像素單元格的大小。人生苦短,我用python,學以致用,讓我們生活更美好!!!
總結
以上是生活随笔為你收集整理的python+selenium+apscheuler实现微信定时发信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 土木工程转行IT
- 下一篇: 如何在优麒麟操作系统安装QQ、微信