zoukankan      html  css  js  c++  java
  • 使用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=['abc123@163.com;abc234@163.com']

             mail.To=receivers[0]

             mail.Subject='这是一个测试邮件'

             mail.Body="Dear XXX   XXXX      XXXX"

             mail.Attachements.Add(‘C:\aaa.xlsx’)      '假设要发的附件在C盘根目录下

             mail.Send()

         

    四、定时任务

           定时任务的实现是采用Windows系统里的任务,创建一任务,调用一个简单的批处理文件,设置成一周调用一次

          文件名: AAA.bat

          内容:

          @echo off

          python C:workpythonXXXXXX.py

          exit

          

    幸福都是奋斗出来的,努力奋斗才能梦想成真。坚持自律,约束自我,克制弱点,坚持努力,遇见更好的自己。
  • 相关阅读:
    Leetcode 1711. 大餐计数(桶)
    macOS下安装powerline-status失败(报错Could not install packages due to an EnvironmentError)
    macOS下安装oh my zsh失败(报错Connection refused)
    Chapter 10 Operator Overloading
    牛客IOI周赛26-普及组 B. 子序列(int128)
    关于状压DP中子集状态的枚举
    2021蓝桥杯省赛第一场C/C++A组 试题E:回路计数(状压DP)
    AcWing 2879. 画中漂流(简单DP)
    Leetcode 525. 连续数组(前缀和性质/map)
    牛客小白月赛34 B. dd爱探险(状压DP)
  • 原文地址:https://www.cnblogs.com/SH170706/p/9767160.html
Copyright © 2011-2022 走看看