当前位置: 首页 > ds >正文

Coze插件AI复刻之:网页截图

告别复制网址→打开浏览器→手动截图的繁琐流程!在Coze发现一款极简插件:只需粘贴网址,1秒自动生成高清截图!亲测比传统方式快10倍,果断用AI复刻自用——现在分享网页内容再也不用切换软件了!

package mainimport ("fmt""log""net/url""os""path/filepath""time""github.com/playwright-community/playwright-go"
)type ScreenshotOptions struct {targetURL stringsavePath  stringfullPage  boolwidth     intheight    int
}// CaptureFullPageScreenshot 截取长网页完整内容并保存
// targetURL: 目标网页地址
// savePath: 截图保存路径(相对/绝对路径均可)
func CaptureFullPageScreenshot(options ScreenshotOptions) error {if options.targetURL == "" {return fmt.Errorf("targetURL 不能为空")}if options.savePath == "" {return fmt.Errorf("savePath 不能为空")}if options.width == 0 {options.width = 1920}if options.height == 0 {options.height = 1080}// 1. 初始化 Playwright 实例(需确保本地已安装 Playwright 浏览器依赖)pw, err := playwright.Run()if err != nil {return fmt.Errorf("初始化 Playwright 失败: %w", err)}// 延迟关闭 Playwright,确保资源释放defer pw.Stop()// 2. 启动浏览器(可选 chromium/firefox/webkit,headless 模式不显示窗口)browser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: playwright.Bool(true),    // 生产环境建议开启无头模式Args:     []string{"--no-sandbox"}, // 避免权限问题(Linux 环境常用)})if err != nil {return fmt.Errorf("启动浏览器失败: %w", err)}// 延迟关闭浏览器defer browser.Close()// 3. 创建新页面page, err := browser.NewPage(playwright.BrowserNewPageOptions{Viewport: &playwright.Size{Width:  options.width,Height: options.height,},Screen: &playwright.Size{Width:  options.width,Height: options.height,},})if err != nil {return fmt.Errorf("创建页面失败: %w", err)}// 延迟关闭页面defer page.Close()// 4. 访问目标网页,等待页面完全加载(load 状态包含所有资源)if _, err := page.Goto(options.targetURL, playwright.PageGotoOptions{WaitUntil: playwright.WaitUntilStateDomcontentloaded, // 等待页面加载完成}); err != nil {return fmt.Errorf("访问网页 %s 失败: %w", options.targetURL, err)}// 如果不是完整页面,才需要滚动if !options.fullPage {// 循环滚动10次,每次滚动1000像素,间隔1秒(根据页面长度调整)for i := 0; i < 10; i++ {if err := page.Mouse().Wheel(0, 1000); err != nil { // 向下滚动1000像素log.Printf("滚动页面失败: %v", err)break}time.Sleep(300 * time.Millisecond) // 等待加载新内容}// 滚动到页面底部if err := page.Mouse().Wheel(0, 10000); err != nil { // 向下滚动10000像素log.Printf("滚动页面失败: %v", err)}}time.Sleep(1 * time.Second) // 等待加载新内容// 5. 关键:设置 FullPage: true 截取整个网页if _, err := page.Screenshot(playwright.PageScreenshotOptions{Path:     playwright.String(options.savePath), // 保存路径FullPage: playwright.Bool(options.fullPage),   // 核心参数:截取完整页面Type:     playwright.ScreenshotTypePng,        // 图片格式(png/jpeg/webp)//Quality:  playwright.Int(90),           // 仅 jpeg/webp 有效,质量 0-100}); err != nil {return fmt.Errorf("生成截图失败: %w", err)}// 转换为绝对路径,方便用户查看absPath, _ := filepath.Abs(options.savePath)fmt.Printf("长网页截图已保存至:%s\n", absPath)return nil
}func main() {saveDir := "./screenshots/" + time.Now().Format("20060102")// 新建截图目录if err := os.MkdirAll(saveDir, 0755); err != nil {log.Fatalf("创建目录失败: %v", err)}// 示例targetURL := "https://www.ai-ku.cn/"// 解析URL,获取文件名parsedURL, err := url.Parse(targetURL)if err != nil {log.Fatalf("解析URL失败: %v", err)}filename := filepath.Base(parsedURL.Hostname()) + ".png" // 提取路径中的文件名,添加.png后缀savePath := filepath.Join(saveDir, filename)             // 保存到当前目录// 统计执行时间startTime := time.Now()// 执行截图并处理错误if err := CaptureFullPageScreenshot(ScreenshotOptions{targetURL: targetURL,savePath:  savePath,fullPage:  true,width:     1920,height:    1080,}); err != nil {log.Fatalf("截图任务失败: %v", err)}// 计算执行时间elapsed := time.Since(startTime)fmt.Printf("截图任务完成!耗时: %v\n", elapsed)
}

http://www.xdnf.cn/news/20162.html

相关文章:

  • 数据结构准备:包装类+泛型
  • 大语言模型推理的幕后英雄:深入解析Prompt Processing工作机制
  • 时序数据库IoTDB的六大实用场景盘点
  • 基于机器学习的缓存准入策略研究
  • 服务器异常磁盘写排查手册 · 已删除文件句柄篇
  • 安装与配置Jenkins(小白的”升级打怪“成长之路)
  • AI-Agent智能体提示词工程使用分析
  • leetcode212.单词搜索II
  • SQL优化与准确性提升:基于RAG框架的智能SQL生成技术解析
  • webrtc之高通滤波——HighPassFilter源码及原理分析
  • 正则表达式,字符串的搜索与替换
  • 【面试题】介绍一下BERT和GPT的训练方式区别?
  • Ansible 项目管理核心要点总结
  • 进程与线程详解, IPC通信与RPC通信对比,Linux前台与后台作业
  • Android入门到实战(八):从发现页到详情页——跳转、传值与RecyclerView多类型布局
  • 深度学习——ResNet 卷积神经网络
  • Python快速入门专业版(二):print 函数深度解析:不止于打印字符串(含10+实用案例)
  • Docker多阶段构建Maven项目
  • K8s资源管理:高效管控CPU与内存
  • React学习之路永无止境:下一步,去向何方?
  • Jmeter基础教程详解
  • STM32H750 RTC介绍及应用
  • 国产GEO工具哪家强?巨推集团、SEO研究协会网、业界科技三强对比
  • 用C++实现日期类
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 关于如何在PostgreSQL中调整数据库参数和配置的综合指南
  • Vue基础知识-脚手架开发-子传父(props回调函数实现和自定义事件实现)
  • Win11 解决访问网站525 问题 .
  • 【RK3576】【Android14】如何在Android kernel-6.1 的版本中添加一个ko驱动并编译出来?
  • Django 常用功能完全指南:从核心基础到高级实战