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分屏截图的合并相关推荐

  1. 三星s8怎么分屏操作_一心三用 三星Galaxy Z Fold2 5G成多任务处理大师-三星 ——快科技(驱动之家旗下媒体)-...

    这两年,"丧文化"成为了一种特定时期的文化现象.在996的工作与家庭生活间来回穿梭,在老板日常催促的Deadline前冲锋陷阵--日渐加快的生活节奏,让我们不得不抓紧时间一心多用. ...

  2. 三星s8怎么分屏操作_一心三用 三星Galaxy Z Fold2 5G成多任务处理大师_

    2020年10月23日 11:15作者:黄页编辑:黄页 这两年,"丧文化"成为了一种特定时期的文化现象.在996的工作与家庭生活间来回穿梭,在老板日常催促的Deadline前冲锋陷 ...

  3. 三星s8怎么分屏操作_日渐加快的生活节奏 让三星Galaxy Z Fold2 5G帮你轻松应对

    (原标题:日渐加快的生活节奏 让三星Galaxy Z Fold2 5G帮你轻松应对) 这两年,"丧文化"成为了一种特定时期的文化现象.在996的工作与家庭生活间来回穿梭,在老板日常 ...

  4. SAP-ABAP-普通OOALV,OOALV分屏展示,发送邮件excel附件合并单元格,附件带框线,附件居中。

    功能展示 1.三个可拖动变换大小的屏幕 2.普通OOALV 3.带格式的邮件附件,三个表格,合并居中,单元格带框线,指定列宽. 代码如下,复制可直接激活,没有include,创建程序后还有一些其他步骤 ...

  5. chrome android 分屏,谷歌开发Android平板分屏多任务功能

    腾讯科技讯 据国外媒体报道,Pixel C是谷歌(微博)自己开发的第一款平板电脑,由于它可以与键盘对接,这也就说明了Android操作系统有可能具备生产力. 问题是,现在还没有合适的配套软件,既无专门 ...

  6. vue实现分屏_vue实现带截图和分屏的功能 , 并且能播放rstp流视频

    分屏功能类似网站的这个功能:http://nvr.liveqing.com:10800/#/screen.这个网站视频点击选择通道就可以选中视频播放. 而且视频为h5视频.需要能播放rstp视频流地址 ...

  7. chrome android 分屏,谷歌调整安卓系统:分屏多任务同时支持两款以上APP

    原标题:谷歌调整安卓系统:分屏多任务同时支持两款以上APP 本月初,三星展示了自家的折叠屏手机方案,虽然看起来机身有点厚,但是屏幕直接的折叠设计,还是相当酷炫的. 除了手机外形,三星还在跟谷歌一起,为 ...

  8. 用Selenium + ChromeDriver 实现多屏滑动截取+拼接(有源码)

    功能来源需求.近期产品提出一个小需求,对自家的html截屏定期发送给用户,初到公司觉得小意思啊,之前做过htmltopdf的功能,然后在pdftopng不是就好了.本是其他组的活,那个组最近活比较多, ...

  9. ipad多任务分屏怎么用_iPad史上最大更新,不了解它你的 iPad 算是废了

    资源置换合作请加 VX 15216685489 硬件产品众测请加 VX 282711398 公众号后台回复「苹果」,进入苹果微信交流群! 聪明如你,一定发现了以往 iPhone 和 iPad 的系统都 ...

最新文章

  1. GRE over IPSEC ×××
  2. c#中在规定时间弹出窗体
  3. linux游戏欢迎界面,制作Linux登录欢迎界面
  4. iptables删除所有规则_如何解决iptables删除命令中遇到的问题
  5. 项目架构之传统三层架构和领域模型三层架构
  6. javascript中encodeURL对象、Boolean对象、Function对象、globalThis对象、Infinity对象、isFinite对象、isNaN对象、JSON对象
  7. python3 类的相关内容
  8. mysql创建表的默认大小_mysql InnoDB建表时设定初始大小的方法
  9. java web 程序---javaBean
  10. 10-ret/retf+call+mul
  11. 如何免费下载DEM数据
  12. 顺丰标准 150标准丰密面单 Clodop 实现打印
  13. 《凤凰项目-一个IT运维从传奇故事》读后感+个人职业思考
  14. 苹果手机如何深度清理_手机应用 | 推荐5款深度清理手机内存的软件
  15. 图的常见衡量指标及算法调研
  16. 如何同时对多个 Word 的内容进行批量替换
  17. R语言用quantstrat包获取股票、债券、基金、黄金、原油、指数、外汇和全球经济数据
  18. 弘辽科技:数字化衍生菜篮子工程,电商巨头纷纷布局
  19. Spring Boot教程(十七)属性配置文件详解(2)
  20. 倒排索引的数据结构:Term index、Term Dictionary、Posting List

热门文章

  1. 高效 保活长连接:手把手教你实现 自适应的心跳保活机制
  2. nodejs 写c++插件的实例
  3. python结果按行输出_python dataframe 输出结果整行显示的方法
  4. 我的内核学习笔记14:内核设备树学习
  5. Linux内核小笔记:spin_lock锁内不能使用sleep休眠
  6. c++ 标准异常类层次结构_Java入门教程十一(异常处理)
  7. bootstrap方法_中介效应中的bootstrap方法
  8. 【Elasticsearch】在Elasticsearch中查询Term Vectors词条向量信息
  9. 【java】java 关键字: final详解
  10. 【面试题】HashMap 面试 21 问