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

 

posted @ 2020-04-07 17:20  清风_Z  阅读(591)  评论(0编辑  收藏  举报