Python打开html页面修改特定元素并区域截图保存


前言

最近在项目测试中遇到了一个测试问题,特此记录一下处理步骤。


一、背景需求

身份识别项目需要每个人的身份证照片,且会自动读取识别身份证号信息进行比对,故需要生成不同的身份证信息图片,并保存,量大概是1万张左右。故需要通过自动化的方式来生成!

二、处理步骤

1.准备工作

  • 可以找前端同学帮助或者自己写一个身份证的html页面,在页面可以通过ID找到身份证号的元素
    在这里插入图片描述

  • 提前准备好身份证信息的txt文本文件,一行一个身份证号
    在这里插入图片描述

2.安装依赖库

pip install selenium

pip install PIL

这些库的功能可以自行百度了解

3.引用

from selenium import webdriver
from PIL import Image

4.代码处理逻辑

4.1 读取txt获取身份证号

# txt_path:txt文件路径
# driver_path: Chrome驱动路径
# html_path: 身份证html页面地址
# picture: 图片路径
def read_idcard(txt_path,driver_path,html_path,picture_path):
    f = open(txt_path)
    l = f.readline()
    while l:
        current_l = l.split()
        id_num = current_l[0]
        print(id_num)
        picture_name = id_num
        save_idcard(id_num,driver_path,html_path,picture_path,picture_name)
        l = f.readline()
    f.close()

4.2 打开html页面找到元素修改身份证号并保存

def save_idcard(photo_name,driver_path,html_path,picture_path,picture_name):
    driver = webdriver.Chrome(driver_path)
    driver.maximize_window()

    # 打开html页面
    driver.get(html_path)

    #执行js语句
    js='document.getElementById("cardno").innerText="%s"'%photo_name
    driver.execute_script(js)
	
	# 先保存一张全量图片
    test_path = picture_path +'/test.png'
    print('test_path: ',test_path)
    driver.save_screenshot(test_path)

    # 定位元素获取身份证信息所在的区域
    pictuer = driver.find_element_by_xpath('//*[@id="sfzzm"]')
    left = pictuer.location['x']
    top = pictuer.location['y']
    elementWidth = pictuer.location['x'] + pictuer.size['width']
    elementHeight = pictuer.location['y'] + pictuer.size['height']
	
	# 打开全量图片并截取特定位置
    photo = Image.open(test_path)
    photo = photo.crop((left, top, elementWidth, elementHeight))
    save_path = picture_path +"\%s.png"%picture_name
    photo.save(save_path)
    driver.quit()
if __name__ == '__main__':
    print(r'*** 修改身份证号小工具V1.1 ***')
    print('\n')
    txt_path = input(r"请输入身份证的txt路径:  ")
    driver_path = input(r"请输入Chrome的驱动路径:  ")
    html_path = input(r"请输入html页面的路径:  ")
    picture_path = input(r"请输入保存图片的文件夹路径:  ")
    read_idcard(txt_path, driver_path, html_path, picture_path)

总结

该方法的缺点是需要打开页面去操作,处理速度较慢。可以更换处理逻辑,先打开浏览器驱动,加载html页面,然后在读取txt文本,在调用循环,在循环中加入修改ID并保存的操作,效率提升很多!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值