吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 541|回复: 26
上一主题 下一主题
收起左侧

[Java 原创] 访问任意URL并截图

  [复制链接]
跳转到指定楼层
楼主
zdx0122 发表于 2024-10-30 12:25 回帖奖励
本帖最后由 zdx0122 于 2024-10-30 12:51 编辑

背景
之前看到国外有一个访问URL自动给截图的产品,看上去很简单,所以就编码实现了下,果然很简单,而且用chatgpt帮忙写了大部分的代码

演示
demo演示:https://screenshot.itest.ren/api/screenshot?url=http://52pojie.cn
替换掉url参数后的value为你想截图的网站域名即可


实现
1. 最核心的内容,就是使用playwright的headless模式进行访问URL并截图:
[Java] 纯文本查看 复制代码
    public CompletableFuture<File> takeScreenshot(String url) {
        // 异步执行截图任务,提交到线程池
        return CompletableFuture.supplyAsync(() -> {
            // 创建一个新的页面
            Page page = browser.newPage();
            page.navigate(url);

            page.waitForLoadState(NETWORKIDLE);

            String modifiedUrl = url.replaceAll("https?://", "");
            // 生成截图文件
            Path screenshotPath = Paths.get("screenshot-" + modifiedUrl + "-"+ System.currentTimeMillis() + ".png");
            page.screenshot(new Page.ScreenshotOptions().setPath(screenshotPath));

            // 关闭页面
            page.close();

            return screenshotPath.toFile();
        }, executorService);
    }


2. 之后使用Controller暴露出来SpringBoot的服务
[Java] 纯文本查看 复制代码
    @GetMapping("/api/screenshot")
    public CompletableFuture<ResponseEntity<byte[]>> getScreenshot(@RequestParam String url) {
        // 异步调用 ScreenshotService
        return screenshotService.takeScreenshot(url).thenApply(screenshot -> {
            try {
                // 将截图文件转换为字节数组
                byte[] imageBytes = Files.readAllBytes(screenshot.toPath());

                // 设置响应头为 image/png
                HttpHeaders headers = new HttpHeaders();
                headers.add(HttpHeaders.CONTENT_TYPE, "image/png");

                // 返回截图数据
                return new ResponseEntity<>(imageBytes, headers, HttpStatus.OK);
            } catch (IOException e) {
                return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
            }
        });
    }


代码开源
完整代码已开源,可自行搭建部署:https://github.com/zdx0122/playwright-screenshot-api


欢迎交流和提idea,可迭代开发

免费评分

参与人数 7吾爱币 +7 热心值 +4 收起 理由
laozhang4201 + 1 + 1 热心回复!
小色虫 + 1 求求来个quicker脚本
ghimi + 1 我很赞同!
Javajpa + 1 + 1 热心回复!
huahuaya + 1 + 1 谢谢@Thanks!
westbaby001 + 1 + 1 我很赞同!
z1017 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
zzp007 发表于 2024-10-30 16:13
ajmide 发表于 2024-10-30 15:39
这个使用场景是保存网页快照吗? 直接把网页下载下来是不是更好啊,礼貌咨询者的使用场景

其实很多,比如说多平台集成,可以在一个综合平台看到这些多平台的页面;又或者是案例库的大页面案例缩略图
推荐
 楼主| zdx0122 发表于 2024-10-30 15:49 |楼主
EVA不白嫖 发表于 2024-10-30 15:36
大佬可不可以搞全部下载的?

详细的描述下需求呢,我试试能不能开发支持下
保存为pdf、滑动页面录屏、录视频都是可以做到的
沙发
nolan022 发表于 2024-10-30 15:26
3#
wakawaka1024 发表于 2024-10-30 15:28
大佬,想问下这个产品有啥应用呢,感觉现在截图软件也都很方便
4#
abozhu 发表于 2024-10-30 15:33
大佬这个要怎么使用呢?浏览器插件还是本机运行的小程序?
5#
EVA不白嫖 发表于 2024-10-30 15:36
大佬可不可以搞全部下载的?
6#
601541027 发表于 2024-10-30 15:38
貌似提交的网页都是通过你的服务器去访问,会不会存在漏洞,比如别人提交的是一个挂马的网页?

微信图片_20241030153702.png (51.39 KB, 下载次数: 0)

微信图片_20241030153702.png
7#
ajmide 发表于 2024-10-30 15:39
这个使用场景是保存网页快照吗? 直接把网页下载下来是不是更好啊,礼貌咨询者的使用场景
8#
dapiqq 发表于 2024-10-30 15:42
楼主应该是给一个方法或例子,具体应用或产品还是要看各位小伙伴自己的。
9#
 楼主| zdx0122 发表于 2024-10-30 15:47 |楼主
wakawaka1024 发表于 2024-10-30 15:28
大佬,想问下这个产品有啥应用呢,感觉现在截图软件也都很方便

是国外有一个类似的产品,其客户是有大量截图很多网页的场景
10#
 楼主| zdx0122 发表于 2024-10-30 15:48 |楼主
abozhu 发表于 2024-10-30 15:33
大佬这个要怎么使用呢?浏览器插件还是本机运行的小程序?

是服务端运行的程序,用Java的SpringBoot写的web服务
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 08:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表