一、项目需求

每周从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=['abc123@163.com;abc234@163.com']

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

最新文章

  1. URL无法显示某些特殊符号
  2. A quick introduction to HTML
  3. 【摘】【网络】无线AP与无线路由器有什么区别?
  4. MyEclipse 启动 tomcate 失败 解决方法
  5. System.Windows.Media.Imageing.BItmapImage 这么用才不会占用文件
  6. php 乱码解决
  7. Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结
  8. 夺命雷公狗---DEDECMS----24dedecms让网站头部分离
  9. cmake用法(转)
  10. 关于sphinx+PHP在高并发时响应性能低下的解决办法
  11. K - The Unique MST - poj 1679
  12. sql必知必会(第四版) 学习笔记一
  13. 路径中“/” "\" "\\"的区别
  14. centos command中 * . 的重要性
  15. 自动获取windows或者linux系统IP
  16. spring boot 单元测试
  17. BZOJ 2728: [HNOI2012]与非(位运算)
  18. 原 layer父子页面交互
  19. uvalive 5731 Qin Shi Huang’s National Road System
  20. 索引Hint提示(INDEX Hint)

热门文章

  1. 区分/不区分大小写的比较,查找字符串在另一字符串中的位置,字符串开头是否包括另一字符串 hasPrefix
  2. [C/C++]宽字符与控制台程序
  3. C语言词法分析:C#源码
  4. ④SpringBoot之thymeleaf使用
  5. float和clear
  6. Indy发送邮件被kbas退掉
  7. 处理mysql主从中断
  8. 搭建Dynamic Web Project(动态web项目)的springmvc工程2
  9. Spring security 浅谈用户验证机制
  10. java数组求输入平均值