影刀RPA 二维码处理:批量生成与自动识别
作者:林焱
一、什么情况用影刀处理二维码
二维码在企业场景中用得越来越多——物流面单上的运单号是二维码,活动签到码是二维码,设备铭牌上的序列号也是二维码。需要批量处理时的痛点:生成几百个二维码逐个操作慢;扫码时手动举手机对着屏幕扫效率低。
影刀RPA可以:
- 批量生成二维码:从Excel中读取数据,自动生成二维码图片并保存
- 自动解析二维码:从截图或文件中批量识别二维码内容
- 网页扫码模拟:在自动化流程中模拟扫码登录
二、实战一:批量生成物流面单二维码
店群矩阵自动化突破运营极限!
场景
仓库发货时,每张面单上要印一个包含运单号的二维码,方便快递员扫码确认。每天几百单,用在线工具逐个生成太慢。
importqrcodefromPILimportImage,ImageDraw,ImageFont# 读取运单号清单orders=pd.read_excel('C:\\仓库\\今日发货清单.xlsx')for_,orderinorders.iterrows():运单号=order['运单号']# 生成二维码qr=qrcode.QRCode(version=2,error_correction=qrcode.constants.ERROR_CORRECT_M,box_size=10,border=2,)qr.add_data(f"TN:{运单号}")qr.make(fit=True)qr_img=qr.make_image(fill_color="black",back_color="white")# 在二维码下方添加运单号文字width=qr_img.width img_with_text=Image.new('RGB',(width,width+40),'white')img_with_text.paste(qr_img,(0,0))draw=ImageDraw.Draw(img_with_text)draw.text((10,width+10),f"运单号:{运单号}",fill='black')# 保存img_with_text.save(f"C:\\仓库\\面单二维码\\{运单号}.png")print(f"生成完成,共{len(orders)}个二维码")影刀整合:
【读取Excel】输出变量:发货清单 【Python代码块】执行上述生成代码 【打开照片查看器】确认生成结果 【将图片文件夹打包为ZIP】 【发送邮件到仓库负责人】三、实战二:批量识别二维码内容
场景
活动签到时收到的几千张包含二维码的截图,需要提取二维码中的参会人信息。
importcv2frompyzbar.pyzbarimportdecodedefdecode_qr_from_image(image_path):"""从一张图片中解码所有二维码"""img=cv2.imread(image_path)# 转为灰度图提高识别率gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 解码decoded_objects=decode(gray)results=[]forobjindecoded_objects:results.append({'数据':obj.data.decode('utf-8'),'类型':obj.type,# QRCODE'位置':obj.polygon})returnresults # 批量处理importos 签到结果=[]二维码图片文件夹='C:\\签到二维码截图\\'forfilenameinos.listdir(二维码图片文件夹):iffilename.endswith(('.png','.jpg','.jpeg')):path=os.path.join(二维码图片文件夹,filename)results=decode_qr_from_image(path)forrinresults:签到结果.append({'文件名':filename,'参会人信息':r['数据'],'识别时间':datetime.now().strftime('%H:%M:%S')})pd.DataFrame(签到结果).to_excel('签到统计.xlsx',index=False)影刀配合:
【读取文件夹】路径:C:\签到二维码截图\ 文件类型:*.png *.jpg 【Python代码块】执行识别 【导出Excel】文件:签到统计.xlsx 【发送钉钉消息】@负责人:今日签到统计已完成四、实战三:Web自动化中的扫码登录绕过
网页版微信、钉钉等需要扫码登录,这对自动化流程来说是个阻断点。
方案一:扫码后缓存Session(推荐)
# 仅首次需要手动扫码yingdao.open_url('https://wx.qq.com')yingdao.wait_for_element('#qrcode')# 提示用户扫码yingdao.show_notification('请扫码登录微信网页版,限时60秒')# 等待扫码完成(检测页面元素变化)foriinrange(120):ifyingdao.element_exists('#chat-list'):print("扫码成功!")breaktime.sleep(0.5)else:[video(video-KJsgJ2DW-1783725110081)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)]raiseException("扫码超时")# 导出Cookie/Sessioncookies=yingdao.get_cookies()withopen('cookies.json','w')asf:json.dump(cookies,f)# 后续运行时直接注入Cookieyingdao.open_url('https://wx.qq.com')yingdao.inject_cookies(json.load(open('cookies.json')))yingdao.refresh()方案二:用已登录的浏览器Profile
【打开浏览器】指定用户数据目录:C:\browser_profiles\wechat_automation # 该目录下存有之前扫码登录的状态 【打开网页】URL:https://wx.qq.com  # 自动恢复已登录状态五、踩坑记录
坑1:二维码图片太小导致识别失败
pyzbar对分辨率敏感的,建议原图200×200像素以上。如果来源图片太小,先用cv2放大:
img=cv2.resize(img,None,fx=3,fy=3,interpolation=cv2.INTER_CUBIC)坑2:二维码周边需要留白
生成二维码时如果box_size太小或图片边界太紧,扫码枪可能读不了。保持border≥2,图片四边留至少10像素白边。
坑3:扫码登录的Session时效不定
微信网页版Session可能几小时过期,钉钉可能几天。方案是在流程中加入"异常处理"——当检测到又被要求扫码时,发通知让用户重新扫码授权。
坑4:pyzbar需要安装Visual C++运行时
Windows上安装pyzbar前需要先安装VC++运行库。如果打包给别人用,要么用纯Python库qrcode(只生成不识别),要么用在线API。
适用人群:仓库管理员、活动运营、物流跟单员
难度:⭐⭐(生成二维码简单,批量识别稍难)