影刀RPA深度教程:Python协同开发指南

影刀的指令覆盖不了所有需求。遇到复杂数据处理、加密签名、调用第三方库时,用Python协同。

这篇文章把Python协同讲透,附带3个完整实战案例。


先装好环境

www.yingdao.com 下载,社区版免费。

在这里插入图片描述

Python环境配置:
影刀内置了Python环境,不需要自己安装。但第三方库需要手动安装:

  1. 打开影刀客户端 → 菜单 → Python
  2. 在弹出的pip安装界面,输入库名(如requests),点安装

第一部分:Python代码指令的基本用法

基本结构

影刀里的"Python代码"指令,要求你写一个main函数,这是入口。

def main(args):
    # args 是影刀传进来的参数(字典类型)
    name = args.get('name')      # 取参数
    result = f"你好,{name}!"   # 处理逻辑
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/12122d5ed7c24163a62dc05d600956f4.png#pic_center)

    return {'result': result}     # 返回值(必须是字典)

在影刀里配置:

指令:Python代码
代码:(贴上面的代码)
参数:{"name": "张三"}        ← 这就是 args
返回值保存到变量:py_result    ← py_result 是字典,取 py_result['result']

第二部分:安装和使用第三方库

安装第三方库

店群矩阵自动化突破运营极限!

影刀里安装第三方库有两种方式:

方式1:图形界面(推荐)
在这里插入图片描述

影刀客户端菜单 → Python → Python包管理
搜索框输入:requests
点"安装"

方式2:pip命令

影刀客户端菜单 → Python → 打开终端
输入:pip install requests

最常用的5个第三方库

库名 用途 安装命令
requests 发HTTP请求(比影刀指令更灵活) pip install requests
pandas 处理Excel/CSV数据(比影刀指令强大10倍) pip install pandas
openpyxl 操作Excel文件(格式、公式、图表) pip install openpyxl
python-docx 生成Word文档 pip install python-docx
hashlib(内置) MD5/SHA1签名计算 无需安装

第三部分:3个完整实战案例

案例1:用requests发HTTP请求(解决影刀HTTP指令做不到的事)

在这里插入图片描述

影刀的HTTP请求指令不支持签名认证(比如淘宝API需要的复杂签名),用Python的requests库解决。

def main(args):
    import requests
    import hashlib
    import time
    
    # 从args取参数
    url = args.get('url')
    app_key = args.get('app_key')
    app_secret = args.get('app_secret')
    
    # 构造签名(举例:把参数按字母排序后MD5)
    params = {
        'app_key': app_key,
        'timestamp': int(time.time()),
    }
    sorted_params = sorted(params.items())
    sign_str = app_secret + ''.join([f'{k}{v}' for k, v in sorted_params]) + app_secret
    sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
    params['sign'] = sign
    
    # 发请求
    resp = requests.get(url, params=params, timeout=30)
    
    return {
        'status_code': resp.status_code,
        'response_text': resp.text,
    }

在影刀里调用:

Python代码
参数:{
  "url": "https://api.example.com/data",
  "app_key": "your_app_key",
  "app_secret": "your_app_secret"
}
返回值保存到:result

If result['status_code'] == 200
  → 处理 result['response_text']

案例2:用pandas处理Excel(批量数据清洗)

影刀的Excel指令处理几千行数据还行,几万行就慢了。用pandas秒处理。

在这里插入图片描述

def main(args):
    import pandas as pd
    
    file_path = args.get('file_path')   # Excel文件路径
    
    # 读取Excel
    df = pd.read_excel(file_path)
    
    # 数据清洗:删除重复行
    df = df.drop_duplicates()
    
    # 数据清洗:去掉"金额"列里的空值
    df = df.dropna(subset=['金额'])
    
    # 数据清洗:金额列如果是字符串,去掉¥符号和逗号
    df['金额'] = df['金额'].astype(str).str.replace('¥', '').str.replace(',', '').astype(float)
    
    # 按金额排序
    df = df.sort_values(by='金额', ascending=False)
    
    # 保存结果(覆盖原文件,或另存为)
    output_path = file_path.replace('.xlsx', '_清洗后.xlsx')
    df.to_excel(output_path, index=False)
    
    return {
        'output_path': output_path,
        'row_count': len(df),
    }

在影刀里调用:

Python代码
参数:{"file_path": "C:\\数据\\原始数据.xlsx"}
返回值保存到:clean_result

打印日志:"清洗完成,共" + str(clean_result['row_count']) + "行,保存至:" + clean_result['output_path']

案例3:用python-docx批量生成Word报告

有Excel里的销售数据,要给每个销售员生成一份Word格式的销售报告。

def main(args):
    from docx import Document
    
    name = args.get('name')         # 销售员姓名
    total_amount = args.get('total_amount')   # 总销售额
    order_count = args.get('order_count')     # 订单数
    output_dir = args.get('output_dir')      # 输出目录
    
    # 打开模板文档(提前做好一个模板.docx,里面用占位符)
    doc = Document(f"{output_dir}\\模板.docx")
    
    # 替换模板里的占位符
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5308fb46664c4c178ca360d267447dcd.png#pic_center)

    for para in doc.paragraphs:
        para.text = para.text.replace('{姓名}', name)
        para.text = para.text.replace('{总销售额}', str(total_amount))
        para.text = para.text.replace('{订单数}', str(order_count))
    
    # 保存为个人报告
    output_path = f"{output_dir}\\{name}_销售报告.docx"
    doc.save(output_path)
    
    return {'output_path': output_path}

在影刀里循环调用(给每个人生成报告):

启动Excel,读取销售数据.xlsx
读取全部内容,保存到:sales_data

ForEach循环:sales_data(从第二行开始)
  → Python代码
      参数:{
        "name": loop_item[0],
        "total_amount": loop_item[1],
        "order_count": loop_item[2],
        "output_dir": "C:\\报告"
      }
      返回值保存到:gen_result
  → 打印日志:"已生成:" + gen_result['output_path']

第四部分:Python与影刀的数据传递

args参数(影刀→Python)

影刀调用Python时,参数是一个JSON字符串,在Python里用args.get('key')取值。

注意类型转换:

def main(args):
    # 影刀传过来的数字,在Python里可能是字符串,要转类型
    price = float(args.get('price'))   # 转成浮点数
    count = int(args.get('count'))     # 转成整数
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f107af24a344e1e976bd1eadcb8bf62.png#pic_center)

    name = args.get('name')            # 字符串不需要转

return返回值(Python→影刀)

Python的return必须是一个字典,影刀接收后可以用"获取JSON对象属性"指令取值。

def main(args):
    # 返回多个值
    return {
        'status': 'success',
        'data': [1, 2, 3],
        
[video(video-PF5NOzPr-1783010811584)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)]

        'message': '处理完成'
    }

在影刀里取返回值:

获取JSON对象属性:py_result['status'] → 保存到:status
获取JSON对象属性:py_result['data'] → 保存到:data_list

第五部分:调试Python代码的方法

方法1:打印日志(最简单)

在这里插入图片描述

def main(args):
    name = args.get('name')
    print(f"接收到的name参数:{name}")   # 这行会输出到影刀的日志面板
    return {'result': name}

在影刀日志面板里能看到接收到的name参数:张三

方法2:先在本地Python环境调试

把代码复制到本地Python(如IDLE、PyCharm),用测试数据跑通,再贴到影刀里。

方法3:捕获异常并返回错误信息

def main(args):
    try:
        import requests
        resp = requests.get(args.get('url'), timeout=10)
        return {'status': 'success', 'data': resp.text}
    except Exception as e:
        # 返回错误信息,而不是让流程直接报错
        return {'status': 'error', 'message': str(e)}

在影刀里判断:
在这里插入图片描述

If py_result['status'] == 'error'
  → 打印日志:"Python执行失败:" + py_result['message']

第六部分:常见报错与解决

报错 原因 解决
ModuleNotFoundError 第三方库没安装 在影刀Python设置里pip install
SyntaxError Python代码有语法错误 先在本地Python环境调试通过再贴过来
TypeError: main() missing 1 required positional argument args参数没传对 检查影刀里"参数"是否填了正确的JSON
KeyError: ‘xxx’ args里没有xxx这个key args.get('xxx')而不是args['xxx'],后者在key不存在时会报错
返回值不是字典 return的值不是dict类型 main函数必须return {'key': value}格式

更多Python协同案例和代码模板,可以在 home.linyan.cloud 查找。

#影刀RPA #Python协同 #进阶教程 #第三方库

作者:林焱
在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐