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