经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇 - 北京-宏哥
来源:cnblogs  作者:北京-宏哥  时间:2024/4/29 9:36:21  对本文有异议

1.简介

这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法。答案当然是:肯定有的。宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享。那么在这个契机下就把它插队分享和讲解一下。Playwright提供了一个截屏的API:page.screenshot。使用该API,只需要指定截图的图片的保存路径及文件名即可。如果仅指定文件名,默认保存在当前目录。

2.截图语法

截图介绍官方API的文档地址:https://playwright.dev/python/docs/screenshots

2.1截图参数

  1. screenshot方法可以进行截图,参数如下:
  2. timeout:以毫秒为单位的超时时间,0为禁用超时
  3. path:设置截图的路径
  4. type:图片类型,默认jpg
  5. quality:像素,不适用于jpg
  6. omit_background: 隐藏默认白色背景,并允许捕获具有透明度的屏幕截图。不适用于“jpeg”图像。
  7. full_page:如果为true,则获取完整可滚动页面的屏幕截图,而不是当前可见的视口。默认为
  8. `假`
  9. clip:指定结果图像剪裁的对象clip={'x': 10 , 'y': 10, 'width': 10, 'height': 10}

3.按照元素截图(截取页面一部分)

有时候,我们可能只想截取页面的一部分,那么,Playwright也支持将想要截取的部分筛选出来,然后调用截图API进行截图。参数同上,只是调用截图方法的对象不同,快速截图是page,按照元素截图是page下的元素,有时截取单个元素的屏幕截图很有用。语法如下:

  1. page.locator(".header").screenshot(path="screenshot.png")

3.1代码设计

使用示例,截图百度页面的form 表单输入框和搜索按钮,如下图所示:

3.2参考代码

  1. # coding=utf-8??
  2.  
  3. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  4.  
  5. # 2.注释:包括记录创建时间,创建人,项目名称。
  6. '''
  7. Created on 2023-11-23
  8. @author: 北京-宏哥
  9. 公众号:北京宏哥
  10. Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-36-如何截图
  11. '''
  12.  
  13. # 3.导入模块
  14. from playwright.sync_api import Playwright, sync_playwright, expect
  15. def run(playwright: Playwright) -> None:
  16. browser = playwright.chromium.launch(headless=False)
  17. context = browser.new_context()
  18. page = context.new_page()
  19. page.goto("https://www.baidu.com/")
  20. element_handle = page.query_selector("#form") # 按照元素截图
  21. element_handle.screenshot(path="screenshot.png")
  22. print(page.title())
  23. page.wait_for_timeout(1000)
  24. context.close()
  25. browser.close()
  26. with sync_playwright() as playwright:
  27. run(playwright)

3.3运行代码

1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

4.捕捉到缓冲区

使用base64对图片数据进行加密、解密。除了可以将页面截图保存为图片之外,也可以使用base64对图片数据进行加密和解密,将图片转换为一串字符。您可以获取包含图像的缓冲区并对其进行后处理或将其传递给第三方像素差异工具,而不是写入文件。语法如下:

  1. screenshot_bytes = page.screenshot()
  2. print(base64.b64encode(screenshot_bytes).decode())

4.1代码设计

示例:截取页面后,转换为一串字符并输出。

4.2参考代码

  1. # coding=utf-8??
  2.  
  3. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  4.  
  5. # 2.注释:包括记录创建时间,创建人,项目名称。
  6. '''
  7. Created on 2023-11-23
  8. @author: 北京-宏哥
  9. 公众号:北京宏哥
  10. Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-36-如何截图
  11. '''
  12.  
  13. # 3.导入模块
  14. import base64
  15. from playwright.sync_api import Playwright, sync_playwright, expect
  16. def run(playwright: Playwright) -> None:
  17. browser = playwright.chromium.launch(headless=False)
  18. context = browser.new_context()
  19. page = context.new_page()
  20. page.goto("https://www.baidu.com/")
  21. screenshot_bytes = page.screenshot()
  22. print(base64.b64encode(screenshot_bytes).decode())
  23. page.wait_for_timeout(1000)
  24. context.close()
  25. browser.close()
  26. with sync_playwright() as playwright:
  27. run(playwright)

4.3运行代码

1.运行代码,右键Run'Test',控制台输出(转换为一串字符并输出),如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

4.4在线Base64转图片

随便百度一个在线Base64转图片的地址,然后将我们上边控制台打印的Base64的字符串复制后,粘贴到工具里,将其转换成图片看看是不是我们的截图结果,如下图所示:

5.小结

 好了,今天时间不早了,关于playwright的截图就先介绍讲解到这里,到此截图基础知识就差不多了,感谢您耐心的阅读!!!

原文链接:https://www.cnblogs.com/du-hong/p/17835685.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号