使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员

一、项目需求

每周从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

原文地址:https://www.cnblogs.com/SH170706/p/9767160.html

时间: 2024-10-10 07:19:49

使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员的相关文章

自动重启、定时开关机、自动登录系统...

第一种方法:电脑自动开机.且音乐随你定 .自动定时开机此功能需要在BIOS中设定,并且你的主板的高级电源管理设置必须支持这个功能,不过现在大多数的主板全支持,放心使用吧.步骤一:启动系统按DEL,进入BIOS,然后选中 "POWER MANAGEMENT FEATURES"(电源管理设置),回车进入.在电源窗口中找到"RESTORE ON AC/POWERLOSS"项,按回车,然后通过方向键设置其值为"POWER ON".步骤二:选中"

python定时执行方法

1  time.sleep import time for i in range(5): print(i) time.sleep(10) 2 用shed import time import sched schedule = sched.scheduler ( time.time, time.sleep ) def func(string1,float1): print("now is",time.time()," | output=",string1,float1

用Golang让自己的电脑自动登录“上网管理”系统

用Golang让自己的电脑自动登录 1.缘起 大天朝的网络一般都是只对某些人开放的.上行下效,同样的措施也作用在我们的教育网上.我想不出来,为什么很多领导的总有这样的恶趣味(如果做的到,他们恨不得监控下属的一言一行).每次在我们的教育网内上网,都必须经过一个“上网管理”系统.当然必定是需要“实名登记”的.对于我这样的老老实实的已进化的猴子来说,这个显然很是多余,每次开机需要登录一次就很是不爽.那么就发挥主观能动性,让它自动化吧. 2.逻辑 程序逻辑非常简单,首先GET一个网页(不好意思选用了ba

Python定时执行脚本

最近测试hbase,老发现服务挂掉,自己不能及时发现,想了想,写了个脚本,让脚本每个小时执行一次,以便检测是否有服务挂掉,如果有服务挂掉,及时启动 import os import datetime class CheckService(object): def __init__(self): pass def getService(self): # service list service = ['Jps' ,'EmbeddedServer' ,'QuorumPeerMain' ,'NodeM

python定时执行任务

from apscheduler.scheduler import Scheduler import datetime # Start the scheduler sched = Scheduler() def job_function(): print "Hello World" , 'start job1 at: ', datetime.datetime.now() def job_f(): print "Hello World" , 'start job2 a

python+selenium+webdriver+BeautifulSoup实现自动登录

from selenium import webdriver import time from bs4 import BeautifulSoup url = "http://www.hsbkos.com/" soup = BeautifulSoup() soup.findAll('div',{'class':'objbox'}) driver = webdriver.Chrome() time.sleep(1) driver.get(url) time.sleep(1) driver.

python+PAMIE 实现自动登录

想写个自动定会议室的程序. 1.会议系统登录后,存在session,提交会议室的订单通过httpwatch拼接后获得链接地址,直接访问链接及可以了 2.如果没有提前登录,就无法提交链接了.使用python+PAMIE实现了了自动登录的过程(登录的链接一直拼接不出来..) 下面说说这个研究过程.. 1.一开始使用了python +mechanize .想把页面的表单直接提交. 代码如下,按道理也是可以成功的.但是发现登录页面的form表单居然还嵌套了另外一个form表单,执行的时候会报错neste

estore商城案例(三)------Filter过滤器:自动登录&权限管理

前面写好了用户登录\注册\添加商品的功能模块.下面写一下对于这些功能模块的相关过滤器---自动登录与权限管理: 一.自动登录: 业务逻辑是这样的:jsp登录页面有个“自动登录选项”,如果登录这勾选了,那么在serlvet程序中则会额外的生成一个保存用户名和密码的cookie,然后每次用户向服务器发送请求时,Filter过滤器都会先判断用户的登录状态(session),如果已经登录那么无需做出受任何操作直接放行,如果没有登录(无session),那么这时体现自动登录功能作用的时候到了,先获取自动登

Linux使用expect脚本实现远程机器自动登录

首先创建一个expect脚本ssh_expect,文件内容如下: #!/usr/bin/expect -f set hostname [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex $argv 2] set timeout 30 set force_conservative 1 if {$force_conservative} { set send_slow {128 .1} } spawn ssh $user@$hos