selenium实现chrome分屏截图的合并
selenium的截图功能在chrome下无法实现,但是可以操作滚动条来一屏一屏的截图,然后再合并成一张图,合并图片的代码在网上找的,十分感谢那位朋友,具体解决方案如下:直接上代码:
1 def capture(base_url, pix_w, pix_h, filename): 2 """chrome截屏 3 base_url- 要截屏的url 4 pix_w- 窗口宽 5 pix_h- 窗口高 6 filename-生成截图的文件名 7 """ 8 try: 9 driver = webdriver.Chrome() 10 driver.set_window_size(pix_w, pix_h+89) 11 driver.get(base_url) 12 time.sleep(2) 13 img_list = [] 14 i = 0 15 while i<20: 16 #滚屏 17 js="var q=document.body.scrollTop="+ str(i*pix_h)+";" 18 driver.execute_script(js) 19 js1 = "return document.body.scrollHeight.toString()+','+document.body.scrollTop.toString()" 20 js1_result = driver.execute_script(js1) 21 real_scroll_h, real_top = js1_result.split(',')[0], js1_result.split(',')[1] 22 #real_scroll_h, real_top 是当前滚动条长度和当前滚动条的top,作为是否继续执行的依据,由于存在滚动条向下拉动后会加载新内容的情况,所以需要以下的判断 23 #如果这次设置的top成功,则继续滚屏 24 if real_top == str(i*pix_h): 25 i += 1 26 driver.save_screenshot('static/capture/wap/wap-'+filename + str(i)+'.png') 27 img_list.append('static/capture/wap/wap-'+filename + str(i)+'.png') 28 last_t = real_top 29 else: 30 #如果本次设置失败,看这次的top和上一次记录的top值是否相等,相等则说明没有新加载内容,且已到页面底,跳出循环 31 if real_top != last_t: 32 last_t = real_top 33 else: 34 driver.save_screenshot(filename + str(i+1)+'.png') 35 img_list.append(filename + str(i+1)+'.png') 36 break 37 image_merge(img_list, "", filename+'.png') 38 except Exception,e: 39 print e 40 def image_merge(images, output_dir, output_name='merge.jpg', restriction_max_width=None, restriction_max_height=None): 41 """垂直合并多张图片 42 images - 要合并的图片路径列表 43 ouput_dir - 输出路径 44 output_name - 输出文件名 45 restriction_max_width - 限制合并后的图片最大宽度,如果超过将等比缩小 46 restriction_max_height - 限制合并后的图片最大高度,如果超过将等比缩小 47 """ 48 def image_resize(img, size=(1500, 1100)): 49 """调整图片大小 50 """ 51 try: 52 if img.mode not in ('L', 'RGB'): 53 img = img.convert('RGB') 54 img = img.resize(size) 55 except Exception, e: 56 pass 57 return img 58 max_width = 0 59 total_height = 0 60 # 计算合成后图片的宽度(以最宽的为准)和高度 61 for img_path in images: 62 if os.path.exists(img_path): 63 img = Image.open(img_path) 64 width, height = img.size 65 if width > max_width: 66 max_width = width 67 total_height += height 68 69 # 产生一张空白图 70 new_img = Image.new('RGB', (max_width, total_height), 255) 71 # 合并 72 x = y = 0 73 for img_path in images: 74 if os.path.exists(img_path): 75 img = Image.open(img_path) 76 width, height = img.size 77 new_img.paste(img, (x, y)) 78 y += height 79 80 if restriction_max_width and max_width >= restriction_max_width: 81 # 如果宽带超过限制 82 # 等比例缩小 83 ratio = restriction_max_height / float(max_width) 84 max_width = restriction_max_width 85 total_height = int(total_height * ratio) 86 new_img = image_resize(new_img, size=(max_width, total_height)) 87 88 if restriction_max_height and total_height >= restriction_max_height: 89 # 如果高度超过限制 90 # 等比例缩小 91 ratio = restriction_max_height / float(total_height) 92 max_width = int(max_width * ratio) 93 total_height = restriction_max_height 94 new_img = image_resize(new_img, size=(max_width, total_height)) 95 96 if not os.path.exists(output_dir): 97 os.makedirs(output_dir) 98 save_path = '%s/%s' % (output_dir, output_name) 99 new_img.save(save_path) 100 for img_path in images: 101 os.remove(img_path) 102 return save_path
大致就这么个思路
转载于:https://www.cnblogs.com/sparkling-ly/p/5466644.html
selenium实现chrome分屏截图的合并相关推荐
- 三星s8怎么分屏操作_一心三用 三星Galaxy Z Fold2 5G成多任务处理大师-三星 ——快科技(驱动之家旗下媒体)-...
这两年,"丧文化"成为了一种特定时期的文化现象.在996的工作与家庭生活间来回穿梭,在老板日常催促的Deadline前冲锋陷阵--日渐加快的生活节奏,让我们不得不抓紧时间一心多用. ...
- 三星s8怎么分屏操作_一心三用 三星Galaxy Z Fold2 5G成多任务处理大师_
2020年10月23日 11:15作者:黄页编辑:黄页 这两年,"丧文化"成为了一种特定时期的文化现象.在996的工作与家庭生活间来回穿梭,在老板日常催促的Deadline前冲锋陷 ...
- 三星s8怎么分屏操作_日渐加快的生活节奏 让三星Galaxy Z Fold2 5G帮你轻松应对
(原标题:日渐加快的生活节奏 让三星Galaxy Z Fold2 5G帮你轻松应对) 这两年,"丧文化"成为了一种特定时期的文化现象.在996的工作与家庭生活间来回穿梭,在老板日常 ...
- SAP-ABAP-普通OOALV,OOALV分屏展示,发送邮件excel附件合并单元格,附件带框线,附件居中。
功能展示 1.三个可拖动变换大小的屏幕 2.普通OOALV 3.带格式的邮件附件,三个表格,合并居中,单元格带框线,指定列宽. 代码如下,复制可直接激活,没有include,创建程序后还有一些其他步骤 ...
- chrome android 分屏,谷歌开发Android平板分屏多任务功能
腾讯科技讯 据国外媒体报道,Pixel C是谷歌(微博)自己开发的第一款平板电脑,由于它可以与键盘对接,这也就说明了Android操作系统有可能具备生产力. 问题是,现在还没有合适的配套软件,既无专门 ...
- vue实现分屏_vue实现带截图和分屏的功能 , 并且能播放rstp流视频
分屏功能类似网站的这个功能:http://nvr.liveqing.com:10800/#/screen.这个网站视频点击选择通道就可以选中视频播放. 而且视频为h5视频.需要能播放rstp视频流地址 ...
- chrome android 分屏,谷歌调整安卓系统:分屏多任务同时支持两款以上APP
原标题:谷歌调整安卓系统:分屏多任务同时支持两款以上APP 本月初,三星展示了自家的折叠屏手机方案,虽然看起来机身有点厚,但是屏幕直接的折叠设计,还是相当酷炫的. 除了手机外形,三星还在跟谷歌一起,为 ...
- 用Selenium + ChromeDriver 实现多屏滑动截取+拼接(有源码)
功能来源需求.近期产品提出一个小需求,对自家的html截屏定期发送给用户,初到公司觉得小意思啊,之前做过htmltopdf的功能,然后在pdftopng不是就好了.本是其他组的活,那个组最近活比较多, ...
- ipad多任务分屏怎么用_iPad史上最大更新,不了解它你的 iPad 算是废了
资源置换合作请加 VX 15216685489 硬件产品众测请加 VX 282711398 公众号后台回复「苹果」,进入苹果微信交流群! 聪明如你,一定发现了以往 iPhone 和 iPad 的系统都 ...
最新文章
- GRE over IPSEC ×××
- c#中在规定时间弹出窗体
- linux游戏欢迎界面,制作Linux登录欢迎界面
- iptables删除所有规则_如何解决iptables删除命令中遇到的问题
- 项目架构之传统三层架构和领域模型三层架构
- javascript中encodeURL对象、Boolean对象、Function对象、globalThis对象、Infinity对象、isFinite对象、isNaN对象、JSON对象
- python3 类的相关内容
- mysql创建表的默认大小_mysql InnoDB建表时设定初始大小的方法
- java web 程序---javaBean
- 10-ret/retf+call+mul
- 如何免费下载DEM数据
- 顺丰标准 150标准丰密面单 Clodop 实现打印
- 《凤凰项目-一个IT运维从传奇故事》读后感+个人职业思考
- 苹果手机如何深度清理_手机应用 | 推荐5款深度清理手机内存的软件
- 图的常见衡量指标及算法调研
- 如何同时对多个 Word 的内容进行批量替换
- R语言用quantstrat包获取股票、债券、基金、黄金、原油、指数、外汇和全球经济数据
- 弘辽科技:数字化衍生菜篮子工程,电商巨头纷纷布局
- Spring Boot教程(十七)属性配置文件详解(2)
- 倒排索引的数据结构:Term index、Term Dictionary、Posting List
热门文章
- 高效 保活长连接:手把手教你实现 自适应的心跳保活机制
- nodejs 写c++插件的实例
- python结果按行输出_python dataframe 输出结果整行显示的方法
- 我的内核学习笔记14:内核设备树学习
- Linux内核小笔记:spin_lock锁内不能使用sleep休眠
- c++ 标准异常类层次结构_Java入门教程十一(异常处理)
- bootstrap方法_中介效应中的bootstrap方法
- 【Elasticsearch】在Elasticsearch中查询Term Vectors词条向量信息
- 【java】java 关键字: final详解
- 【面试题】HashMap 面试 21 问