【RPA笔记】持续更新


未完待续(闲暇时间会将近年来所掌握的技术与工具进行分享,不定期更新)

什么是RPA

![RPA展望世界如此美好](https://img-blog.csdnimg.cn/d39ec8066f744bfd9a9c31221f9bdfc8.jpeg#pic_center
RPA展望世界如此美好

RPA(Robotic Process Automation,机器人流程自动化)技术通过模拟人工操作键盘鼠标,自动处理计算机中规则清晰、批量重复的工作与任务。

背景

过去的一年,RPA机器人流程自动化行业迎来了一个快速发展的机遇。RPA创业者得到了国内投资人的认可,一些RPA公司也接连拿到千万美金级别的融资,这在当下遇冷的资本市场环境下显得格外耀眼。

眼下,RPA已在金融、财会、电信、能源、制造、物流等行业领域生根发芽。当下的RPA技术可以替代各行业企业内部软件中所有需要人工重复操作的工作。

以上内容摘自知乎,目前RPA开发工具及产品层出不穷,较为成熟的产品可以自行搜索,各大RPA厂商意在提供简单高效的低代码类工具,不过万变不离其宗,首先我们还是应当掌握编程的基础知识及RPA构建的基本思想。

准备工作

截止目前我们已初步了解RPA,但距离开发一个属于自己的RPA程序我们还需要了解以下基础内容:

  1. 可以《python开发指南》为参考,了解程序的基本组成如,变量类型、运算符、条件语句、循环语句
  2. 网页自动化,以uibot为例可直接通过鼠标拖拽的方式进行元素锁定,较传统RPA开发效率提升乃至5-10倍;但我们不能只看重便捷,更应理解其中的原理,乃至修改其自动生成的代码块;
  3. 数据处理,由于数据处理逻辑不定,几乎所有RPA厂商提供的Excel或者数据处理自动化不是很实用;目前我所采用的方案为(pandas+xlwings+openpyxl)即可完成几乎所有适用RPA的业务场景;
  4. GUI可作为进阶内容,需先掌握较为简单的网页自动化。

环境搭建

工欲善其事,必先利其器

作为开发也是相同的道理;在我们选定好适用自己的RPA工具可去相应厂商的官网进行软件的下载进行安装;
除此之外安装python相应的开发工具作为后续进阶的利器,此处推荐pycharm专业版(收费,可自行百度或淘宝~嘘嘘嘘~~~~)

基础语法

此处不在一一叙述,现成及优秀的文档较多
参考所选用RPA工具官网,可对应去社区进行搜索
python基础语法可参考菜鸟教程或者B站进行学习

网页自动化

元素定位方式

网页元素定位方式

实现方式

python(selenium)、uibot等市场RPA工具

文件与文件夹

文件夹的创建与删除

os库

文件的创建、复制、移动、删除

python-shutil库

数据处理

基于pandas、xlwings、openpyxl实现

vlookup

左连接为主(内-外连接为辅)与vlookup相同而不同
数据连接

数据透视

数据透视表pandas实现方式

调用excel公式

xlwings调用excel公式

GUI自动化

os、为win32

句柄锁定工具

SPYXX、Inspect、UISpy

消息推送

飞书、企微群消息推送

# 功能:企业微信群消息推送
# 创建时间:{2023/1/5} 13:07
# 开发人:xiaoqiaoBQ

import json
import requests

"""
url : 群自定义机器人webhook地址
title : 消息标题
text : 文本内容
"""


def wecomGroupMessagePush(url, content):
    # 你复制的webhook地址
    url = url
    # _________________________________发送富文本消息_____________________________________________________
    rich_text = {
        "msgtype": "markdown",
        "markdown": {
            "content": content
        }
    }
    headers = {
        'Content-Type': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=json.dumps(rich_text))
    print(response.text)

发送邮件

# 功能:
# 创建时间:{2022/12/6} 14:45
# 开发人:  xiaoqiaoBQ


# coding=gbk
import zipfile
import os
import mimetypes
import smtplib  # 发送邮件模块
from email import encoders
from email.mime.multipart import MIMEMultipart  # 使用MIMEMultipart来标示这个邮件是多个部分组成的
from email.mime.base import MIMEBase
from email.mime.text import MIMEText  # 定义邮件内容
# import datetime
from email.utils import formataddr


def zipDir(dirpath, outFullName):
    zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
    for path, dirnames, filenames in os.walk(dirpath):
        # 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
        fpath = path.replace(dirpath, '')
        for filename in filenames:
            zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
    zip.close()
    print('压缩成功')


def send_email(filepath, yesterday, receivers):
    # filepath = "D:\haoxin008\Desktop\RPA理房通线下退费状态反馈\结果\结果.zip"  # 要发送的压缩文件路径
    smtp_server = ""  # 发送邮箱服务器
    username = ""  # 用于发送邮箱的用户账号
    password = ""  # 密码(即授权码)
    sender = ''  # 发送者的邮箱
    # receivers = []  # 接收者的邮箱
    EMAIL_FROM_NAME = ' '  # 自定义发件人名称

    # time = datetime.datetime.today().strftime("%m-%d %H:%M")
    msg = MIMEMultipart()
    # 邮件正文
    msg.attach(MIMEText("hi,all!\r\n" + yesterday + "理房通、线下退费状态反馈结果请见附件内容", 'plain', 'utf-8'))  # 文本内容换行\r\n
    msg['From'] = formataddr(pair=(EMAIL_FROM_NAME, sender))  # 自定义发件人的名称
    # msg['To'] = receivers[0]  # 发送给receivers里的第一个用户
    msg['To'] = ";".join(receivers)  # 发送给多个好友
    subject = "" # 主题
    msg['Subject'] = subject
    data = open(filepath, 'rb')
    ctype, encoding = mimetypes.guess_type(filepath)
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)
    file_msg = MIMEBase(maintype, subtype)
    file_msg.set_payload(data.read())
    data.close()
    encoders.encode_base64(file_msg)  # 把附件编码
    file_msg.add_header('Content-Disposition', 'attachment', filename="结果.zip")  # 修改邮件头
    msg.attach(file_msg)
    try:
        server = smtplib.SMTP(smtp_server)
        server.login(username, password)
        server.sendmail(sender, receivers, msg.as_string())
        server.quit()
        print("发送成功")
    except Exception as err:
        print("发送失败")
        print(err)


# if __name__ == '__main__':
#     # dirpath 为要压缩的文件夹路径,outFullName为压缩完后要存放的路径
#     dirpath = r'.\结果'
#     outFullName = r'.\结果\结果.zip'
#     zipDir(dirpath, outFullName)
#     send_email()

录屏

调用录屏

# 功能:EV录屏自动化操作录制
# 创建时间:{2023/1/9} 13:27
# 开发人:  xiaoqiaoBQ
import time
import uiautomation
import os

"""
EV录屏操作类
"""


class ev_screen_recording(object):
    """
    ev_install_path : EV录屏安装路径
    recording_path : 视频存储路径
    """

    def __init__(self, ev_install_path, recording_path):
        self.ev_install_path = ev_install_path
        self.recording_path = recording_path

    """
    开始录屏
    """

    def recording_start(self):
        os.startfile(self.ev_install_path)  # 打开EV录屏
        calc = uiautomation.WindowControl(Name="EV录屏")
        calc.CheckBoxControl(Name=" 列表").Click()
        calc.TextControl(Name="更改默认保存位置").Click()  # 更改视频存储路径
        calc_1 = calc.WindowControl(Name="选择存储路径")  # 弹出框
        calc_1.EditControl(AutomationId="1152").SendKeys(self.recording_path)  # 视频保存路径
        calc_1.ButtonControl(Name="选择文件夹").Click()  # 弹出框
        calc.CheckBoxControl(Name=" 开始").Click()  # 开始录制

    """
    录屏结束
    """

    def recording_end(self):
        os.startfile(self.ev_install_path)  # 打开EV录屏
        calc = uiautomation.WindowControl(Name="EV录屏")
        time.sleep(5)
        calc.ButtonControl(Name="停止").Click()  # 结束录制
        os.system('taskkill /f /im EVCapture.exe')  # 关闭EV录屏,直接杀死进程

# test
# a = ev_screen_recording(r".\EVCapture.exe", ".\录屏存储")
# a.recording_start()
# a.recording_end()

数据持久化

线下文件

数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值