• RPA网页表格数据填报定位方法


    在做RPA项目的网页表格填报时总结了几个方法,记录一下:

    import os
    import datetime
    import copy
    import requests
    
    # 主流程配置
    rpatime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    # 一、排污单位基本信息子流程配置
    # 网页模板中c1与excle数据不对应但实际为同一种类型的映射关系
    web_excel_dict = {"原料": "主要原料用量", "辅料": "主要辅料用量", "主要产品": "生产规模"}
    # 网页中列数比其他类别多一列的类别配置
    web_special_c1 = ["能源消耗"]
    # 新增选择c1时网页中与excle数据不对应但实际为同一种类型的映射关系
    excel_web_c1_add_dict = {"主要原料用量": "主料原料用量"}
    
    
    # 网页表格模板中的分类c1
    # web_c1_dict = {'主要原料用量': '1', '主要辅料用量': '2', '能源消耗': '3', '生产规模': '4', '运行时间和生产负荷': '5', '主要产品产量': '6', '取排水': '7', '污染治理设施计划投资情况': '8'}
    # num_c1_dict = {'1': "主要原料用量", '2': "主要辅料用量", '3': "能源消耗", '4': "生产规模", '5': '运行时间和生产负荷', '6': "主要产品产量", '7': "取排水", '8': "污染治理设施计划投资情况"}
    # web_table中的原始样式数据
    # data_li.pop(0)
    # new_data = {}
    
    def is_int(s):
        """判断字符串是否为整数"""
        try:
            int(s)
            return True
        except ValueError:
            pass
        return False
    
    
    def dispose_web_tb(web_table_li):
        """对网页表格进行处理,行列对齐"""
        tb_li = copy.deepcopy(web_table_li)
        tb_li.pop(0)
        num = ''
        web_c1 = ''
        web_c2 = ''
        web_c3 = ''
        for row in tb_li:
            if row[-1].strip() in ['编辑', '删除']:
                row.pop()
            if is_int(row[0]):
                if row[1] in web_excel_dict:
                    row[1] = web_excel_dict[row[1]]
                if len(row) != 8:  # 少c4
                    row.insert(4, '')
                num = row[0]
                web_c1 = row[1]
                web_c2 = row[2]
                web_c3 = row[3]
            else:
                row.insert(0, num)
                row.insert(1, web_c1)
                if web_c1 not in web_special_c1:
                    row.append("")  # 缺少c4
                if len(row) == 8:
                    web_c2 = row[2]
                    web_c3 = row[3]
                else:
                    row.insert(2, web_c2)
                    if len(row) == 8:
                        web_c3 = row[3]
                    else:
                        row.insert(3, web_c3)
        # log.info("len验证")
        # log.info([len(i) for i in tb_li])  # 验证len是否一致为8
        return tb_li
    
    # new_web_tb = dispose_web_tb(web_table_li)
    # log.info(new_web_tb)
    # log.info([len(i) for i in new_web_tb])
    # log.info(new_data)
    
    
    def get_tr_td(table_li, new_tb_index):
        """
        获取tr和td号
        :param table_li: 原始网页表格,二维数组
        :param new_tb_index:所在新表格中的索引
        :return: tr, 数量td
        """
        org_tb_index = new_tb_index + 1  # 索引加一得到源列表的索引(因新列表去掉了表头)
        tr_num = org_tb_index + 1  # 该行tr
    
        tr_content = table_li[org_tb_index]  # tr内容
        subtractor = 2  # 长度需减去的数值, 初始值
        if is_int(tr_content[0]):
            subtractor += 1
        if tr_content[-1].strip() in ['编辑', '删除']:
            subtractor += 1
        td_count_num = len(tr_content) - subtractor  # 填入数量的td
        return tr_num, td_count_num
    
    
    def get_add_tr_td(table_li, c1):
        """
        获取新增时的tr和 数量的td
        :param table_li: 原始网页表格内容
        :param c1: 记录内容c1
        :return:
        """
        for index, item_li in enumerate(table_li):
            if item_li[1] == c1:
                tr_num = index + 1
                td_count_num = len(item_li) - 4
                return tr_num, td_count_num
  • 相关阅读:
    windows中80端口被System占用,PID=4的问题
    SpringBoot中动态加载(热部署)
    eclipse中Cannot change version of project facet Dynamic Web Module to 3.0的问题解决
    Eclipse启动tomcat后404错误
    Eclipse在当前行之上插入一行
    Java中==规则
    简明log4j配置教程
    CentOS7 配置静态IP
    CentOS7 mini安装后没有ifconfig命令的解决办法
    shell编程学习笔记之sed编辑器
  • 原文地址:https://www.cnblogs.com/zwq-/p/12654563.html
Copyright © 2020-2023  润新知