本人开发了一个执行信息网的数据查询工具, 需求是我老婆公司提出来的,正好有闲暇时间就开发了,提升了她们公司工作效率90%
查询人必须依法使用查询信息,不得用于非法目的和不正当用途。非法使用本网站信息给他人造成损害的,由使用人自行承担相应责任。
演示视频
https://githubs.xyz/boot?app=48
使用方法
详细用法见演示视频, 支持excel输入文件,必须只能有两列,第一列是姓名,第二列是身份证号码。
输出文件也是excel, 有3列, 第一列是姓名,第二列身份证,第三列是结果数据。
当能查到被执行数据时,第三列显示 时间和执行号,当查不到时,则显示否。
关于数据量
数据量本程序是没有明确的限制, 速度也可以参见演示视频,当数据量有上千乃至上万时, 可以提供下面思路优化。
程序是可以同时运行多个的, 我们可以将数据拆解成几个excel, 然后启动几个程序同时跑数据,则可以提高很大查询效率。
部分源码
代码是python写的,下面贴出部分代码
def reset():
global running
running = False
ui_start.config(state=tk.NORMAL)
global web
print("reset " + str(web))
if web:
web.close()
web = None
def write_output(output_data, log):
if not output_data:
return
for file in output_data:
for path in file.keys():
if path.endswith(".xlsx") or path.endswith(".xls"):
wb = Workbook()
ws = wb.active
ws.append([title_name, title_card, '结果'])
for line in file[path]:
ws.append([line['name'], line['card'], line['ret']])
wb.save(path)
log("输出文件 : " + path)
if path.endswith(".csv"):
with open(path, 'w', encoding='UTF8') as f:
writer = csv.writer(f)
writer.writerow([title_name, title_card, '结果'])
for line in file[path]:
writer.writerow([line['name'], line['card'], line['ret']])
log("输出文件完成 : " + path)
# output_data = start0(console, "E:/桌面/中转站/qiqi", conf)
# write_output(output_data)
def console(content):
DATE_TIME = time.strftime('[%Y-%m-%d %H:%M:%S]')
ui_console.insert('end', f'{DATE_TIME} {content}\n') # 向text文本框末尾追加文字
ui_console.see(tk.END) # 光标一直追加到文件末尾
ui_console.update() # 一直更新输出
def open_dir():
fileDir = askdirectory() # 选择目录,返回目录名
ui_in_dir.delete(0, tk.END)
ui_in_dir.insert(0, fileDir)
def start():
conf = {
"home_index": Home_URL, ## 首页url
"dom_code": "id.captchaImg", # 验证码元素 , 支持: id. css. xpath. 格式
"dom_code_input": "css.#yzm", # 验证码输入框
"dom_name": '''xpath.//*[@id="pName"]''', # 姓名 输入框
"dom_card": "css.#pCardNum", # 身份证 输入框
"dom_query": "css.div.col-lg-2:nth-child(7) > button:nth-child(1)", # 查询按钮
"dom_code_err": "xpath./html/body/div[2]/div/div/div[1]/form[1]/div[4]/div[4]", # 错误验证码提示
"dom_code_ok": "xpath./html/body/div[2]/div/div/div[1]/form[1]/div[4]/div[5]", # 正确验证码提示
"dom_result": "xpath./html/body/div[2]/div/div/div[2]/div[1]/div/table/tbody/p", # 查询结果元素
"unfind_keyword": "范围内没有找到", # 没有找到结果的关键词
"dom_result_ok_table": "id.result-table" # 查询到结果的表格元素
}
## 开始线程
ui_start.config(state=tk.DISABLED)
Thread(target=start0, args=(console, ui_in_dir.get(), conf)).start()
def force_close():
global running
running = False
if not web:
return
reset()
window = tkinter.Tk()
window.title("中国执行信息网查询-开发者QQ:657455400")
screenWidth = window.winfo_screenwidth() # 获取显示区域的宽度
screenHeight = window.winfo_screenheight() # 获取显示区域的高度
left = (screenWidth - 500) / 2
top = (screenHeight - 500) / 2
window.geometry("%dx%d+%d+%d" % (500, 500, left, top))
##################ui
padding = 10
h = 30
tk.Label(window, text='数据源目录:').place(x=padding, y=padding, w=100, h=h)
ui_in_dir = tk.Entry(window)
ui_in_dir.place(x=padding * 2 + 100, y=padding, w=200, h=h)
ui_select_dir = tk.Button(window, text='选择目录', command=open_dir)
ui_select_dir.place(x=padding * 3 + 100 + 200, y=padding, w=80, h=h)
ui_start = tk.Button(window, text='打开浏览器', command=start)
ui_start.place(x=padding, y=padding * 2 + h, w=160, h=h)
tk.Button(window, text='强制停止', command=force_close).place(x=padding*2 + 160, y=padding * 2 + h, w=160, h=h)
ui_console = scrolledtext.ScrolledText(window, width=500, height=300, bg='#000', font=('宋体', 8),
foreground='#fff')
ui_console.place(x=padding, y=padding * 3 + h * 2, w=490, h=400)
###################
def close():
reset()
window.destroy()
window.protocol('WM_DELETE_WINDOW', close)
window.mainloop()
结尾语
查询人必须依法使用查询信息,不得用于非法目的和不正当用途。非法使用本网站信息给他人造成损害的,由使用人自行承担相应责任。