南充网站建设广州网站建设工作室

襄阳旭缘鑫纺织有限公司 2026/09/09 19:25:40

BrowserUse14-源码-ScreenShot模块-整理


ScreenShot模块

1-源码部分

【下载】基于图片的Base64进行图片的,【查看】指定本地的文件路径进行查看

""" 浏览器使用代理的截图存储服务。 """importbase64frompathlibimportPathimportanyiofrombrowser_use_manual.observabilityimportobserve_debugclassScreenshotService:"""简单的截图存储服务,将截图保存到磁盘"""def__init__(self,agent_directory:str|Path):"""初始化时传入代理目录路径"""self.agent_directory=Path(agent_directory)ifisinstance(agent_directory,str)elseagent_directory# 创建 screenshots 子目录self.screenshots_dir=self.agent_directory/'screenshots'self.screenshots_dir.mkdir(parents=True,exist_ok=True)@observe_debug(ignore_input=True,ignore_output=True,name='store_screenshot')asyncdefstore_screenshot(self,screenshot_b64:str,step_number:int)->str:"""将截图保存到磁盘,并返回完整路径字符串"""screenshot_filename=f'step_{step_number}.png'screenshot_path=self.screenshots_dir/screenshot_filename# 解码 base64 并保存到磁盘screenshot_data=base64.b64decode(screenshot_b64)asyncwithawaitanyio.open_file(screenshot_path,'wb')asf:awaitf.write(screenshot_data)returnstr(screenshot_path)@observe_debug(ignore_input=True,ignore_output=True,name='get_screenshot_from_disk')asyncdefget_screenshot(self,screenshot_path:str)->str|None:"""从磁盘路径加载截图,并以 base64 格式返回"""ifnotscreenshot_path:returnNonepath=Path(screenshot_path)ifnotpath.exists():returnNone# 从磁盘读取并编码为 base64asyncwithawaitanyio.open_file(path,'rb')asf:screenshot_data=awaitf.read()returnbase64.b64encode(screenshot_data).decode('utf-8')

2-测试用例

测试【截图】模块的【本地图片的下载和读取】和【远程文件的下载和读取】

#!/usr/bin/env python3""" Screenshot 截图服务测试用例 测试读取本地图片文件并转换为base64编码,然后使用截图服务进行测试 """# 添加项目根目录到 Python 路径以支持导入importsysfrompathlibimportPath sys.path.insert(0,str(Path(__file__).parent.parent.parent))importbase64importasyncioimportloggingimporthttpxfrombrowser_use_manual.screenshots.serviceimportScreenshotService# 配置日志logging.basicConfig(level=logging.INFO,format='%(levelname)s - %(name)s - %(message)s')logger=logging.getLogger(__name__)asyncdeftest_get_screenshot_from_file(image_path:str):"""测试从文件读取截图并转换为base64"""# 检查文件是否存在path=Path(image_path)ifnotpath.exists():logger.error(f"测试图片文件不存在:{image_path}")returnFalse# 读取图片文件并转换为base64withopen(path,"rb")asimage_file:image_data=image_file.read()image_b64=base64.b64encode(image_data).decode('utf-8')logger.info(f"图片文件 '{image_path}' 已转换为base64,长度:{len(image_b64)}字符")# 创建截图服务实例agent_dir=Path(__file__).parent.parent/"test_data"screenshot_service=ScreenshotService(agent_dir)# 使用截图服务存储截图stored_path=awaitscreenshot_service.store_screenshot(image_b64,1)logger.info(f"截图已存储到:{stored_path}")# 使用截图服务读取截图retrieved_b64=awaitscreenshot_service.get_screenshot(stored_path)ifretrieved_b64==image_b64:logger.info("✓ 成功: 从磁盘读取的截图与原图一致")returnTrueelse:logger.error("✗ 失败: 从磁盘读取的截图与原图不一致")returnFalseasyncdeftest_get_screenshot_from_url(image_url:str):"""测试从URL下载图片并转换为base64"""try:# 下载远程图片asyncwithhttpx.AsyncClient()asclient:response=awaitclient.get(image_url)response.raise_for_status()image_data=response.content image_b64=base64.b64encode(image_data).decode('utf-8')logger.info(f"远程图片 '{image_url}' 已下载并转换为base64,长度:{len(image_b64)}字符")# 创建截图服务实例agent_dir=Path(__file__).parent.parent/"test_data"screenshot_service=ScreenshotService(agent_dir)# 使用截图服务存储截图stored_path=awaitscreenshot_service.store_screenshot(image_b64,2)logger.info(f"截图已存储到:{stored_path}")# 使用截图服务读取截图retrieved_b64=awaitscreenshot_service.get_screenshot(stored_path)ifretrieved_b64==image_b64:logger.info("✓ 成功: 从磁盘读取的截图与下载的图片一致")returnTrueelse:logger.error("✗ 失败: 从磁盘读取的截图与下载的图片不一致")returnFalseexceptExceptionase:logger.error(f"下载或处理远程图片时出错:{e}")returnFalseasyncdefrun_all_tests():"""运行所有测试"""# 1-测试本地文件(如果指定了有效路径)test_image_path="/Users/rong/Documents/EnzoApplication/WorkSpace/Python/20251209_1_Python_playwright_manual/browser-use-manual-file/test_screen_image.jpg"path=Path(test_image_path)ifpath.exists():logger.info(f"开始测试本地图片文件:{test_image_path}")local_success=awaittest_get_screenshot_from_file(test_image_path)else:logger.warning(f"本地测试图片文件不存在:{test_image_path}")local_success=True# 不影响远程图片测试# 2-测试远程图片remote_image_url="https://i-blog.csdnimg.cn/direct/bee22ad9c3b74f07b8568843e48fe08e.png"logger.info(f"开始测试远程图片URL:{remote_image_url}")remote_success=awaittest_get_screenshot_from_url(remote_image_url)returnlocal_successandremote_successdefmain():# 指定要测试的图片文件路径logger.info("测试截图服务,包括本地文件和远程图片")# 运行所有测试success=asyncio.run(run_all_tests())ifsuccess:print("
🎉 截图服务测试全部通过!")else:print("
❌ 截图服务某些测试失败!")if__name__=="__main__":main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

陕西网站建设六安网站建设

第一章:Open-AutoGLM多因素认证集成概述Open-AutoGLM 是一个面向自动化场景的通用语言模型集成框架,支持在高安全要求的应用环境中实现多因素认证ÿ

2026/06/30 12:18:00

北京网站建设福州网站建设

谷歌镜像站点对访问CosyVoice3资源有帮助吗?实际用途解析在当前国内开发者频繁接触海外开源AI项目的背景下,一个现实问题反复浮现:如何稳定、高效地获取托

2026/06/30 11:48:57

网站建设费用免费企业网站建设

摘要近年来,全球范围内的突发公共卫生事件频发,高校作为人员密集场所,疫情防控压力尤为突出。传统的人工登记、纸质填报等方式效率低下,信息更新滞后&

2026/06/30 11:41:27

天门网站建设好的网站建设

从零开始:Equalizer APO音频调校完整指南【免费下载链接】equalizerapoEqualizer APO mirror项目地址: https://gitcode.com/g

2026/06/30 14:17:39

济南网站建设医院网站建设方案

如果有一天,你的软件功能突然没人用了,你该怪谁?深夜的办公室里,产品经理指着毫无波澜的增长曲线,质问开发团队:“这个

2026/06/30 12:40:02

浙江网站建设梧州网站建设

2025年12月18日,温暖而明媚的阳光轻柔地洒落在《河连壵地》的场馆之上,仿佛大自然特意为这一重要时刻披上了一层金色的光辉,赋予其别样的神圣与美好。这一场意

2026/06/30 12:40:32

网站公司建设seo网站建设

第一章:自动批改时代的核心驱动力教育技术的演进正以前所未有的速度重塑教学流程,其中自动批改系统的兴起标志着智能化评估时代的到来。这一变革背后,是多项关键技术的

2026/06/30 13:15:35