python-Selenium

荐python3中StringIO和BytesIO使用方法和使用场景详解  https://www.pythonheidong.com/blog/article/336850/feb09b4b0cd0ee16c92d/

-*- coding:utf-8 -*-
一. Python + Selenium实现截图
 自动化测试的时候,如果页面操作出现了问题,可以用截图的方式保留问题现场,同时验证自己发现的问题,那么,我们来看看 selenium 截图的方法有哪些呢?
selenium 里面截取图片的4种方法:
    方法1: driver.get_screenshot_as_file(filename) # 保存网页截图,格式 png, 其他格式报警告
    方法2: driver.save_screenshot(filename)  #  将当前窗口的屏幕截图保存为PNG图像文件。
    方法3: driver.get_screenshot_as_png() # 以二进制数据的形式获取当前窗口的屏幕截图。
    方法4: driver.get_screenshot_as_base64() #  base64 编码原始数据,以base64编码字符串的形式获取当前窗口的屏幕快照,这对HTML中的嵌入图像很有用。
    参考:https://www.pythonheidong.com/blog/article/336850/feb09b4b0cd0ee16c92d/

from selenium import webdriver
from time import sleep
import time
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 方法1
driver.get_screenshot_as_file('图片1.png')

# 方法2
driver.save_screenshot('图片2.png')

# 方法3
from io import BytesIO
from PIL import Image
driver.set_window_size(800,600)
ss1 = driver.get_screenshot_as_png()
ss2 = Image.open(BytesIO(ss1))
print("浏览器size:", driver.get_window_size())
print("全图size:", ss2.size)

# 方法4
driver.get_screenshot_as_base64()

sleep(2)
driver.quit()
# '''说明:
# get_screenshot_as_png,get_screenshot_as_base64 这两种方法对于测试人员并不实用,实际应用场景,也没能找到。所以这里只做记录。
# base64背后的全部思想是,它允许您创建二进制数据的ASCII表示,这将增加数据大小,但也允许您实际使用它。例如,如果您试图通过一个二进制数据流发送到一个套接字,那么除非服务器准备处理二进制数据,否则不进行编码,结果很难预测。
# 这可能导致传输的数据畸形,提早切断传输,导致许多其他几乎不可能预测的结果。例如,如果您要运行一个非常简单的套接字服务器,它只打印出它接收到的std::out的所有内容,接收一个二进制文件很可能会损坏您的控制台终端(您可以在自己的Linux机器上尝试它)。
# 当然,如果服务器被设计成接收和处理二进制数据,那么这就不是问题,但大多数情况下,服务器端会将用户输入解释为字符串,这使得使用base64是一个明智的选择。
# '''

# '''
# 二. PIL 图像处理标准库
# pillow 官网:https://pillow.readthedocs.io/en/stable/reference/Image.html
# 1. 对于图像识别,大量的工作在于图像的处理,处理效果好,那么才能很好地识别,因此,良好的图像处理是识别的基础。再者,webdriver 提供的截图方法是没法截取弹出框的,我们可以使用 Image 来截图,截取当前屏幕 ImageGrab;
# 2. PIL:Python Imaging Library,是 Python 的图像处理标准库。安装 PIL 库: pip install pillow
# 3. PIL可以做很多和图像处理相关的事情:
    # 图像归档(Image Archives):PIL非常适合于图像归档以及图像的批处理任务。你可以使用PIL创建缩略图,转换图像格式,打印图像等等。
    # 图像展示(Image Display):PIL较新的版本支持包括Tk PhotoImage,BitmapImage还有Windows DIB等接口。PIL支持众多的GUI框架接口,可以用于图像展示。
    # 图像处理(Image Processing):PIL包括了基础的图像处理函数,包括对点的处理,使用众多的卷积核(convolution kernels)做过滤(filter),还有颜色空间的转换。PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换。PIL还有一些直方图的方法,允许你展示图像的一些统计特性。这个可以用来实现图像的自动对比度增强,还有全局的统计分析等。
# 4. PIL中有很多模块:
    # https://blog.csdn.net/icamera0/article/details/50651926?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
    # Image模块、ImageGrab模块、ImageChops模块、ImageCrackCode模块、ImageDraw模块、ImageEnhance模块、ImageFile模块、ImageFileIO模块、ImageFilter模块、ImageFont模块、ImageOps模块、ImagePath模块、ImageSequence模块、ImageStat模块、ImageTk模块、ImageWin模块、PSDraw模块。
    # >>> import PIL
    # >>> dir(PIL)
    # ['BmpImagePlugin', 'GifImagePlugin', 'GimpGradientFile', 'GimpPaletteFile', 'Image', 'ImageChops', 'ImageColor', 'ImageFile', 'ImageMode', 'ImagePalette', 'ImageSequence', 'JpegImagePlugin', 'JpegPresets', 'PaletteFile', 'PngImagePlugin', 'PpmImagePlugin', 'TiffImagePlugin', 'TiffTags', 'UnidentifiedImageError', '__builtins__', '__cached__', '__doc__', '__file__', '__getattr__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_binary', '_imaging', '_plugins', '_raise_version_warning', '_util', 'sys', 'warnings']
    
# 5.Image 模块,我们对 Image 模块做一下说明:
    # https://blog.csdn.net/zhangziju/article/details/79123275
    # https://blog.csdn.net/leemboy/article/details/83792729
    # https://blog.csdn.net/weixin_34248023/article/details/93391918
    # Image 模块是在 Python PIL 图像处理中常见的,也是最重要的模块,对图像的基础操作都包含于此模块内。比如创建、打开、显示、保存图像等功能,合成、裁剪、滤波等功能,获取图像属性功能,如图像直方图、通道数等。
    # 即 open、save、conver、show、...等功能。
    # >>> from PIL import Image
    # >>> print(dir(Image))
    # ['ADAPTIVE', 'AFFINE', 'ANTIALIAS', 'BICUBIC', 'BILINEAR', 'BOX', 'CONTAINER', 'CUBIC', 'Callable', 'DECODERS', 'DEFAULT_STRATEGY', 'DecompressionBombError', 'DecompressionBombWarning', 'ENCODERS', 'EXTENSION', 'EXTENT', 'Exif', 'FASTOCTREE', 'FILTERED', 'FIXED', 'FLIP_LEFT_RIGHT', 'FLIP_TOP_BOTTOM', 'FLOYDSTEINBERG', 'HAMMING', 'HUFFMAN_ONLY', 'ID', 'Image', 'ImageMode', 'ImagePointHandler', 'ImageTransformHandler', 'LANCZOS', 'LIBIMAGEQUANT', 'LINEAR', 'MAXCOVERAGE', 'MAX_IMAGE_PIXELS', 'MEDIANCUT', 'MESH', 'MIME', 'MODES', 'MutableMapping', 'NEAREST', 'NONE', 'NORMAL', 'OPEN', 'ORDERED', 'PERSPECTIVE', 'Path', 'QUAD', 'RASTERIZE', 'RLE', 'ROTATE_180', 'ROTATE_270', 'ROTATE_90', 'SAVE', 'SAVE_ALL', 'SEQUENCE', 'TRANSPOSE', 'TRANSVERSE', 'TiffTags', 'USE_CFFI_ACCESS', 'UnidentifiedImageError', 'WEB', '_E', '_ENDIAN', '_MAPMODES', '_MODEINFO', '_MODE_CONV', '__builtins__', '__cached__', '__doc__', '__file__', '__getattr__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_apply_env_variables', '_check_size', '_conv_type_shape', '_decompression_bomb_check', '_filters_support', '_fromarray_typemap', '_getdecoder', '_get

你可能感兴趣的:(python,python,selenium,开发语言)