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

太原市科鑫网络科技有限公司 2026/09/09 19:09:13

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()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

江苏网站建设阿里网站建设

Zstandard压缩技术终极指南:从快速上手到性能优化【免费下载链接】zstdZstandard - Fast real-time compression algorithm项目地址:

2026/06/30 13:30:06

网站建设专家酒店网站建设

如何将 EmotiVoice 集成到微信小程序中?实战教程在短视频和语音社交盛行的今天,用户早已不再满足于“机器朗读”式的冰冷语音。无论是教育类小程序里需要情绪起伏的儿童故

2026/06/30 14:12:39

盐城网站建设黄石网站建设

还在为无法保存Qobuz平台的高品质音乐而烦恼吗?这款开源Qobuz下载工具绝对是你的救星!🎵 本教程将带你彻底掌握这个音乐下载技术,无需复杂

2026/06/30 11:01:23

营销网站建设义乌网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:编写性能测试脚本,对比三种文件扩展名提取方法:1

2026/06/30 13:59:38

网站建设什么网站建设深圳

文章摘要随着工业机器人在制造业的快速部署,先进维护技术需求日益凸显。本研究提出一种基于大型语言模型(LLM)辅助的数据增强方法,解决维护文本中嵌套实体识别难题和工业数据标注稀缺问题,构建更细粒度的故障

2026/06/30 13:48:07

网站建设模板上海外贸网站建设

计算机网络在给我们带来便利的同时,也存在很多安全隐患,比如信息伪造,病毒入侵,端点监听,SQL 注入等,给我们日常生

2026/06/30 11:46:27

房地产网站建设东莞南城网站建设

目录已开发项目效果实现截图开发技术介绍系统开发工具:核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码

2026/06/30 13:56:38

泉州网站建设网站建设知识

基于 PyTorch 的语音识别项目快速启动模板:从环境到训练的无缝实践在智能语音助手、会议转录和实时字幕系统日益普及的今天,越来越多的研究者与开发者希望快速验证自己的语音

2026/06/30 14:08:39

pc网站建设网站建设网站

Automa智能自动化:告别重复劳动的终极解决方案【免费下载链接】automaA browser extension for automating your browser by con

2026/06/30 11:45:27

网站建设教程网站外链建设

训练成本超预算?GPU显存频频告急?项目deadline迫在眉睫却因计算资源不足而停滞?这几乎是每个AI开发者都会遇到的痛点。本文将深度解析Transform

2026/06/30 11:19:25