浏览器自动化的扫码或验证码处理

Selenium是一个浏览器器自动化的神器,能自动完成一些简单重复的浏览器工作,比如打开网址,对页面特定元素进行特定操作,截图。不过它毕竟不是人眼,不能识别图形验证码,对于扫码二维码也无能为力,不过好在这个环节人可以帮忙,当然人也不能一直在现场等着处理这个扫码和图片验证码识别的操作,所以可以将登录环节的二维码或验证码通过邮件发送给处理者,处理者及时扫码或将验证码识别后存到特定位置,由Selenium自动去获取,这样繁重的活儿让selenium去干,人只负责处理必要的登录即可,是不是感觉轻松了一些呢?
网页中图片的获取有多种方法,Selenium可以截图,不过区域是整个网页,虽然后面可以再抠图,不过没有必要,也可以找到img的src,如果是图片文件那么可以按源路径再抓文件下来,不过这个也不一定好,因为有可能脱离浏览器的http get会遇到一些麻烦,我比较推荐的一个方法是通过js处理一下,将img在canvas中重绘,保存为base64编码。
这个base64编码还有一个好处,就是直接可以作为smtp附件发出,连保存为本地文件的环节都省了。

...
with open("taskargs.json", "r", encoding='utf-8') as file:
	file_data = file.read()
args = json.loads(file_data)
...
browser.get('https://mp.weixin.qq.com/')
print("访问微信公众平台网址,请耐心等待10秒")
time.sleep(10)

js = "let c = document.createElement('canvas');let ctx = c.getContext('2d');" \
     "let img = document.getElementsByClassName('login__type__container__scan__qrcode')[0]; /*找到图片*/ " \
     "c.height=img.naturalHeight;c.width=img.naturalWidth;" \
     "ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);" \
     "let base64String = c.toDataURL();return base64String;"

base64_str = browser.execute_script(js)

message = MIMEMultipart()
message['From'] = Header("微信公众号任务", 'utf-8')
message['To'] = Header("公众平台账号管理员", 'utf-8')
message['Subject'] = Header('请扫码登录微信公众平台', 'utf-8')
message.attach(MIMEText('登录二维码图片', 'plain', 'utf-8'))

att1 = MIMEText(base64_str, 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="loginqrcode.png"'
message.attach(att1)

smtpObj = smtplib.SMTP(args['mailserver'], args['mailport'])
smtpObj.sendmail(args['mailsender'], args['mailreceiver'], message.as_string())
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值