博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python + Selenium操作一:截图详解
阅读量:5304 次
发布时间:2019-06-14

本文共 3272 字,大约阅读时间需要 10 分钟。

在做测试的时候,空口无凭都是白掐,特别是自动化测试的时候,更需要图片来佐证自己发现的问题

话不多说,直接进入主题,技术就是这么直白

Webdriver自带截图功能,get_screenshot_as_file(),save_screenshot(),使用起来还是蛮方便的

get_screenshot_as_file()方式

该方式很简单,通过driver获取该方法,将截图要保存的路径写入就好,先看一张图,没运行代码的时候,Picture目录下还没有名为baidu.png的图片,建个Picture目录,是为了方便管理截图的图片

 

接下来运行代码,保存的图片如下:

可以看到,图片是截图成功了的,在对应文件夹下也是可以看到图片的,代码如下:

# coding=utf-8from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("https://www.baidu.com")driver.maximize_window()time.sleep(2)try:    picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\baidu.png')    print("%s:截图成功!!!" % picture_url)except BaseException as msg:    print(msg)driver.quit()

这里需要注意的是,文件存放的路径一定要正确,路径中的\\双斜杠,有一个是转义符,这个就不多说了

这种方式写法太过于死板,这样运行下去,图片名字会重名,达不到什么好效果,可以生成代码运行的当前时间,来做为图片名,这样就不会再出现该问题了,修改代码如下:

# coding=utf-8from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("https://www.baidu.com")driver.maximize_window()time.sleep(2)picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))print(picture_time)try:    picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\'+ picture_time +'.png')    print("%s:截图成功!!!" % picture_url)except BaseException as msg:    print(msg)driver.quit()

代码运行后,查看截图的效果,如下:

该方法使用起来更加方便,算是一个小小优化

save_screenshot()方式

save_screenshot()与get_screenshot_as_file()方式都是一样,先看一个小例子,代码如下:

# 截图方式二# coding=utf-8from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("https://www.baidu.com")driver.maximize_window()time.sleep(2)try:    picture_url=driver.save_screenshot('.\\baidu1.png')    print("%s :截图成功!!!" % picture_url)except BaseException as msg:    print("%s :截图失败!!!" % msg)driver.quit()

运行该代码后,在当前目录下会保存成功一张名为baidu1.png的图片,如下:

一种方式学会,另一种是不是很简单了,接下来以这种截图方式,来做个优化吧,先看代码:

# 截图方式二# coding=utf-8from selenium import webdriverimport osimport time# 生成年月日时分秒时间picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))directory_time = time.strftime("%Y-%m-%d", time.localtime(time.time()))print(picture_time)print(directory_time)# 打印文件目录print(os.getcwd())# 获取到当前文件的目录,并检查是否有 directory_time 文件夹,如果不存在则自动新建 directory_time 文件try:    File_Path = os.getcwd() + '\\' + directory_time + '\\'    if not os.path.exists(File_Path):        os.makedirs(File_Path)        print("目录新建成功:%s" % File_Path)    else:        print("目录已存在!!!")except BaseException as msg:    print("新建目录失败:%s" % msg)driver = webdriver.Chrome()driver.get("https://baidu.com/")try:    url=driver.save_screenshot('.\\' + directory_time + '\\' + picture_time + '.png')    print("%s :截图成功!!!" % url)except BaseException as pic_msg:    print("截图失败:%s" % pic_msg)time.sleep(2)driver.quit()

 该代码的优化,是自动创建日期目录,并将截取的图片以年月日时分秒命名保存在当前日期目录下,这样就能很方便的查看图片保存路径,也方便管理自己的测试图片

 运行代码,我们来查看结果,如下:

这样运行代码后,就自动生成了名为2018-09-16的文件夹,截取的图片命名为2018-09-16-16_14_18.png,并保存在2018-09-16的文件夹下,如果明天运行该代码,就会生成新的文件夹,并命名为2018-09-17,这样就很好的区分了图片日期来源,如果再次运行该代码,就会提示文件夹已存在,图片依然截取成功,如下:

好了,这就是今天的截图内容了,还有可优化的地方,比如,截取指定大小的图片,截取元素的图片,如果页面很长,单单使用该两种方式是截取不全的,这就需要使用JS的配合了。今天所述内容,有误的地方,希望大家及时指出,我也及时改正。

学习的一点心得,大家都知道,遇到问题,不要逃避,更不要慌张,慢慢来,沉下心来,多度娘,多看博客,终究会解决的。今天在使用第二种方式优化代码截图的时候,由于没有新建目录的那一步,所以一直截图不成功,后面灵机一动,先给创建一个目录,再运行代码,结果就截图成功了,有点小喜悦。

 

本文仅代表作者观点,系作者@温一壶清酒发表。转载请注明出处:

转载于:https://www.cnblogs.com/hong-fithing/p/9656221.html

你可能感兴趣的文章
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
pip和easy_install使用方式
查看>>
博弈论
查看>>
Redis sentinel & cluster 原理分析
查看>>
我的工作习惯小结
查看>>
把word文档中的所有图片导出
查看>>
浏览器的判断;
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
机器学习/深度学习/其他开发环境搭建记录
查看>>
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>