1. 程式人生 > >使用Python定時執行一任務,自動登錄某web系統,生成報表,然後發送郵件給指定人員

使用Python定時執行一任務,自動登錄某web系統,生成報表,然後發送郵件給指定人員

sel web mail word 發送郵件 查詢條件 xxxxx receive emp

一、項目需求

每周從A系統生成一張Excel報表,發送此報表給指定人員,相關人員依據此報表去完成後續的工作。

項目限制:

1、無法通過EDI系統交互的方式從後臺讀取數據

2、由於公司網絡環境限制,不能使用SMTP發送郵件,比如,不能通過smtp.163.com發送郵件

二、解決方案

模擬人工操作,登錄系統,輸入相應查詢條件,生成報表,保存後發送郵件給指定人員。

采用技術:采用Python

三、關鍵點

1、使用selenium模擬登錄瀏覽器

‘使用IE瀏覽器

driver.webdriver.Ie()

driver.get("http://XXXXX")

‘最大化瀏覽器

driver.maximize_window()

‘找到登錄賬號的組件名

elem=driver.find_element_by_name("tbx_loginEmpNo")

‘輸入登錄賬號,假定登錄賬號是AAAAA

elem.send_keys(u"AAAAA")

’找到登錄口令組件

elem=driver.find_element_by_name("tbx_Password")

‘假定登錄口令是XXXXXX

elem.send_keys(u"XXXXXX")

‘點擊登錄按鈕

driver.find_element_by_id("btnSignIn").send_keys(Keys.ENTER)

2、使用pyautogui模擬鍵盤操作,根據日期輸入動態查詢條件

‘鼠標所在位置的(X,Y)坐標的獲得

print(pyautogui.position())

‘可以設定鼠標移動到屏幕上任何位置,以(X,Y)坐標表示

ptautogui.moveTo(x,y,duration=1)

‘模擬鼠標左鍵點擊

ptautogui.click(x,y)

’獲得當前日期

today=datetime.date.today()

‘無法直接把today輸入到屏幕上的文本框裏,需要轉換成字符串類型

‘這裏假定查詢從今天往前一周的數據

sBeginDate=(today-datetime.timedelta(days=7)).strftime(‘%Y-%m-%d‘)

sEndDate=today.strftime(‘%Y-%m-%d‘)

‘在往屏幕上文本框裏輸入日期條件時,先移到指定位置

pyautogui.moveTo(x,y,duration=1)

‘點鼠標左鍵確定輸入到文本框裏

pyautogui.click(x,y)

‘輸入動態日期

pyautogui.typewrite(sBeginDate)

這裏如果直接在pyautogui.typewrite(today)則會報錯,需要把today轉換成字符串

3、import win32Com.client as win32

調用Outlook,發送郵件,需要已具備公司內部郵箱賬號

參考示例:

outlook=win32.Dispatch(‘outlook.application‘)

mail=outlook.CreateItem(0)

receivers=[‘[email protected];[email protected]‘]

mail.To=receivers[0]

mail.Subject=‘這是一個測試郵件‘

mail.Body="Dear XXX \r\n XXXX \r\n XXXX"

mail.Attachements.Add(‘C:\\aaa.xlsx’) ‘假設要發的附件在C盤根目錄下

mail.Send()

四、定時任務

定時任務的實現是采用Windows系統裏的任務,創建一任務,調用一個簡單的批處理文件,設置成一周調用一次

文件名: AAA.bat

內容:

@echo off

python C:\work\python\XXXXXX.py

exit

使用Python定時執行一任務,自動登錄某web系統,生成報表,然後發送郵件給指定人員