使用playwright进行图片截图

news/2025/2/14 0:12:04/

从公众号转载,关注微信公众号掌握更多技术动态

---------------------------------------------------------------

一、基础入门

1.简单介绍

    playwright是一款新型的自动化测试工具,功能非常强大,使用下来有很多的优点 

  • 支持异步。

  • 内置浏览器驱动。

  • 支持移动端。

  • 代码生成。

  • 安装和使用都非常简单。

2.安装

pip install --upgrade pippip install playwright  # 安装playwrightplaywright install  # 安装驱动

3.基本使用方法

(1)同步模式

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:    browser = p.chromium.launch(headless=False)    page = browser.new_page()    page.goto('http://www.baidu.com')    print(page.title)    browser.close()

(2)异步模式

async def main():    async with async_playwright() as p:        browser = await p.chromium.launch(headless=False)        page = await browser.new_page()        await page.goto("http://www.baidu.com")        print(await page.title())        await browser.close()asyncio.run(main())

二、实际应用及踩坑事项

1.实际应用

(1)接口

@app.route("/screenShotArea", methods=["POST"])def run():
    handle_result = {"code": "200", "msg": "SUCCESS"}
    try:        cmd_str = "python3 src/screenshot/screenshot.py"        os.system(cmd_str)    except Exception as e:        log.error(f"截图处理中发生异常: {str(e)}")        handle_result = {"code": "500", "msg": "系统异常"}
    return handle_result

(2)执行截图文件

if __name__ == "__main__":    with sync_playwright() as p:        Screenshot().run(p)        def run(self,p):        browser = p.chromium.launch(headless=True)        context = browser.new_context(viewport=SCREENSHOT_VIEWPORT)        page = context.new_page()
        # 具体截图操作              page.close()        browser.close()

2.踩坑项

(1)同步playwright在linux下只能在main方法下执行

如果想要通过接口形式调用则需要使用​​​​​​​

cmd_str = "python3 src/screenshot/screenshot.py"os.system(cmd_str)

但是这种方法导致文件引用关系异常,需要把引用的相关路径加到sys中

project_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  # 获取当前文件的绝对路径print(project_path)sys.path.append(project_path)

(2)异步playwright在linux下会一直等待

(3)linux版本不匹配

    playwright对系统的版本要求较高,如果出现让升级系统的提示绝对不要升级,如果升级失败可以采用以下方式进行回退

libstdc++.so.6软连接指向了一个不存在的libstdc++.so.6.0.21报错

解决方法:

    只需要先删除这个软链接,之后重新设置一个软链接让libstdc++.so.6 指向我们机器上的那个版本libstdc++.so.6.0.19就解决这个问题了

3.截图验证

  防止截图是未加载完成的图片,可以通过识别文字的方式验证图片是否加载完成(tesseract的使用参考网络)

 def valid_screen_shot(self, image_path):        if not VALID_SCREENSHOT_SWITCH:            return True
        image = cv2.imread(image_path)
        # 使用Tesseract进行文字识别        text = pytesseract.image_to_string(image, lang='chi_sim')        cv2.destroyAllWindows()
        # 判断识别结果是否包含中文        if re.search('[\u4e00-\u9fff]', text):            return True        return False

http://www.ppmy.cn/news/1257961.html

相关文章

Vue2学习笔记(事件处理)

一、基本使用 1.使用v-on:xxx 或 xxx 绑定事件,其中xxx是事件名;2.事件的回调需要配置在methods对象中,最终会在vm上;3.methods中配置的函数,不要用箭头函数!否则this就不是vm了;4.methods中配…

python实现FINS协议的UDP服务端

python实现FINS协议的UDP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样,可以使用现成的pymodbus模块去实现。但是,我们可以根据协议帧进行组包,自己去实现帧的格式,而这一切可以基于socket模块。本文基于原先 FINS协议的TCP…

「吞噬星空」布罗占地球奖1000亿,罗峰洪雷神诱敌深入,狩猎开始

Hello,小伙伴们,我是拾荒君。 国漫《吞噬星空》第96集更新,和许多激动的漫迷一样,一更新拾荒君就去观看。这一集中,罗峰在白兰星司长的介绍下,决定购买仓库基地的永久产权和两栋九层城堡。他使用黑龙币支付了272万&am…

计算机网络:可靠数据传输(rdt)、流水协议、窗口滑动协议

文章目录 前言一、Rdt1.Rdt1.02.Rdt2.03.Rdt2.14.Rdt2.25.Rdt3.0 二、流水线协议1.滑动窗口(slide window)协议发送窗口接收窗口正常情况下的2个窗口互动异常情况下GBN的2个窗口互动异常情况下SR的2窗口互动GBN协议和SR协议的异同 2.小结 总结 前言 Rdt…

自定义一个简单的JDBC连接池实现方法(附代码演示)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍自定义一个简单的JDBC连接池实现方法以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在…

活动目录是什么?

企业在进行数字化转型时,也会面临日益增长的网络用户和复杂的身份管理需求。为了高效地管理用户身份、控制访问权限以及保护企业的数据安全,许多企业选择使用微软的Active Directory,即微软活动目录,来作为网络身份管理系统。 1、…

linux 安装 Apache 服务 并部署网站

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 写在前面 哈喽大家我是网络豆,本章将会…

git的基本命令操作超详细解析教程

Git基础教学 1、初始化配置2、初始化仓库3、工作区域和文件状态4、添加和提交文件5、git reset 回退版本6、git diff查看差异7、删除文件git rm8、.gitignore10、分支基础应用1、本地文件提交到远程仓库 Git:一个开源的分布式版本控制系统,它可以在本地和…