selenium实现chrome分屏截图的合并

selenium的截图功能在chrome下无法实现,但是可以操作滚动条来一屏一屏的截图,然后再合并成一张图,解决方案如下:

def test_capture(url, w_pix,h_pix):
    try:
        self.driver.set_window_size(w_pix,h_pix)
        self.driver.get(url)
        self.driver.implicitly_wait(5)
        i = 0
        img_list = []
        while i<30:
            js="var q=document.body.scrollTop="+ str(i*wap_pixs[pix][1])+";"
            self.driver.execute_script(js)
            time.sleep(1)
            js1 = "return document.body.scrollHeight-document.body.scrollTop"
            s= self.driver.execute_script(js1)
            if h_pix >= s:
                break
            else:
                self.driver.save_screenshot(str(i)+‘.png‘)
                img_list.append(str(i)+‘.png‘)
            i += 1
        image_merge(img_list)  except:    print ‘error‘
from PIL import Imagedef image_merge(images, output_dir=‘‘, output_name=‘merge.jpg‘, restriction_max_width=None, restriction_max_height=None):
    """垂直合并多张图片
    images - 要合并的图片路径列表
    ouput_dir - 输出路径
    output_name - 输出文件名
    restriction_max_width - 限制合并后的图片最大宽度,如果超过将等比缩小
    restriction_max_height - 限制合并后的图片最大高度,如果超过将等比缩小
    """
    def image_resize(img, size=(1500, 1100)):
        """调整图片大小
        """
        try:
            if img.mode not in (‘L‘, ‘RGB‘):
                img = img.convert(‘RGB‘)
            img = img.resize(size)
        except Exception, e:
            pass
        return img

    max_width = 0
    total_height = 0
    # 计算合成后图片的宽度(以最宽的为准)和高度
    for img_path in images:
        if os.path.exists(img_path):
            img = Image.open(img_path)
            width, height = img.size
            if width > max_width:
                max_width = width
            total_height += height  

    # 产生一张空白图
    new_img = Image.new(‘RGB‘, (max_width, total_height), 255)
    # 合并
    x = y = 0
    for img_path in images:
        if os.path.exists(img_path):
            img = Image.open(img_path)
            width, height = img.size
            new_img.paste(img, (x, y))
            y += height  

    if restriction_max_width and max_width >= restriction_max_width:
        # 如果宽带超过限制
        # 等比例缩小
        ratio = restriction_max_height / float(max_width)
        max_width = restriction_max_width
        total_height = int(total_height * ratio)
        new_img = image_resize(new_img, size=(max_width, total_height))  

    if restriction_max_height and total_height >= restriction_max_height:
        # 如果高度超过限制
        # 等比例缩小
        ratio = restriction_max_height / float(total_height)
        max_width = int(max_width * ratio)
        total_height = restriction_max_height
        new_img = image_resize(new_img, size=(max_width, total_height))  

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    save_path = ‘%s/%s‘ % (output_dir, output_name)
    new_img.save(save_path)
    for img_path in images:
        os.remove(img_path)
    return save_path 

大致就这么个思路

时间: 2024-10-18 07:41:49

selenium实现chrome分屏截图的合并的相关文章

Window Tidy:最好的 MacOS 分屏工具

本文标签: MacOS分屏工具 WindowTidy Mac小工具 早在 Windows 7 的时代,微软就给其引入了分屏的功能.将窗口拖至显示屏的左右和上边缘,就可以将窗口变为显示器大小的一半或者全屏.而在之后的 Windows 8 和 Windows 10 中,这个功能被发扬光大,甚至可以做到一屏四窗.也因为 Windows 在窗口排列的开创性创新,我们给 Windows 的分屏功能给予了高度的评价. 但是反观 macOS ,直到 2015 年发布的 OS X El Capitan 才引入了

【python爬虫】利用selenium和Chrome浏览器进行自动化网页搜索与浏览

功能简介:利用利用selenium和Chrome浏览器,让其自动打开百度页面,并设置为每页显示50条,接着在百度的搜索框中输入selenium,进行查询.然后再打开的页面中选中“Selenium - 开源中国社区”,并打开页面 知识简介: selenium的作用: 1).最初用于网站自动化测试,近几年,用于获取精确的网站快照. 2).可以直接运行在浏览器上,让浏览器自动加载页面,获取需要的数据,还可以页面截屏,或者判断网站上某些动作是否发生. 项目步骤: 1.利用google的Chrome浏览器

华为P7移动版刷机包 EMUI3.0 官方B604 多任务分屏 自定义

ROM介绍 [功能简介]: . 运营商自定义 . 内核支持 init.d 脚本(已经内置 root) . 状态栏实时网速显示 . 多任务分屏模式 . 修改版屏幕助手,使功能更实用,使用起来更顺手: 所有按键长按动作均可以选择,有如下选项: 手电筒 | 快捷菜单 | 屏幕截图 | 锁屏 | 悬浮程序 | 高级设置 | 语音助手 | 结束当前程序 | 音量加 | 音量减 | 菜单键 | 最小化屏幕助手 | 无动作 增加屏幕助手最小化功能(通过长按实现),在看电影或玩游戏时可以显示为一个小点 记忆屏幕

Tmux Linux 分屏工具

刚进入IT行业做Linux运维,小白一枚.在公司发现有同事使用mac操作linux系统界面时,可以使用快捷键分屏,于是自己在网上找了一下linux相关的分屏工具. Tmux是一个键盘驱动的终端分屏工具,可以替代Linux下的screen.当然,如果是在Mac下使用的话,它的核心功能(例如window,分屏等)也是可以被iTerm2替代的,不过好在Tmux在unix操作系统中足够通用,用包管理工具(apt-get, brew等)即可安装,所以了解并熟练使用它,还是能为平时终端下的工作节省不少时间的

clients(PV操作共享内核内存进行输入输出分屏) - server(进程间通信)模型实现

1.拓扑结构 2.PV操作共享内核内存进行输入输出分屏 (1) 1 int semop(int semid,struct sembuf *sops,size_t nsops): 功能描述 操作一个或一组信号. semid: 信号集的识别码,可通过semget获取. sops: 指向存储信号操作结构的数组指针,信号操作结构的原型如下 1 struct sembuf 2 { 3 unsigned short sem_num; /* semaphore number */ 4 short sem_op

Vi编辑器下使用分屏显示

new 打开新文件:spilt 设置为水平分屏:vsplit 设置为垂直分屏:only 取消分屏 >1.Ctrl+W,然后马上来个nCtrl+w,再一个c,是关闭当前的窗口> 2.如何split horizontally? Ctrl + w, s split vertically Ctrl + w, v > 3.如何切换焦点? Ctrl + w, w 后一个Ctrl + w, p 前一个 Ctrl + w, h 四个方向Ctrl + w, iCtrl + w, kCtrl + w, l

分屏显示

我们在做排队叫号(不限于排队,其他需要多个屏幕显示的应用都可以)的时候,总是需要将呼叫内容显示到显示器.电视机或者LED显示屏上面.之前一章,我已经讲过如何用C#控制LED显示器了,这一篇,我讲一下分屏显示. 我最近做了几个排队叫号系统,用到LED.电视机显示屏和电脑显示屏.LED控制比较复杂,需要考虑LED控制卡接口,多数还要写带格式的txt文件.显示器或者电视机就比较容易实现,只需要设置一下电脑和一些简单的代码就可以实现的. 接下来,我就分享一下步骤: (1)电脑设置 XP:屏幕空白地方右键

android4.0 A10开发板,如何实现分屏(多屏幕显示)不同的内容

============问题描述============ 设想是如上图所示 目前的情况是,我有A10的开发板,android4.0.4 如果有同行的话,希望能指点一下 目前能单独显示vga,hdmi,lvds三种屏幕 vga  和  hdmi如果同时插入的话总有一个是不能正常显示的,因为我配置的 sys_config1.fex文件里面有单独针对的参数, 只要能让我实现分屏显示不同的内容(不同的屏,显示的不同的内容连接的是同一块板子)就行,连接显示是vga和tv     vga和hdmi    h

android仿系统Launcher界面,实现分屏,左右滑动效果(ViewSwitcher)

ViewSwitcher代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitcher 支持指定动画效果. 为了给ViewSwitcher 添加多个组件, 一般通过ViewSwitcher 的setFactory 方法为止设置ViewFactory ,并由ViewFactory为之创建View 即可. 下面通过一个实例来介绍 ViewSwitcher的用法.(仿Android系统L