• 请不要在回答技术问题时复制粘贴 AI 生成的内容
codingMayCry
V2EX  ›  程序员

实现网页截图

  •  
  •   codingMayCry · May 10, 2024 · 6962 views
    This topic created in 910 days ago, the information mentioned may be changed or developed.

    求问大佬,有一个需求:

    是想实现截图给定的 url 网页,生成截图图片,找了一些资料,也找到了一个能实现效果的网站: https://urlbox.com/

    不过这个网站提供的是网页截图 API 服务,试用了一下,推测实现原理是请求对应的 URL ,拿到请求所有的服务器资源,然后在他这个网站的服务器上进行 SSR 后端渲染,生成 HTML ,转成图片。

    不过不确定是否实现的主要技术采用的是 SSR(server side rendering),所以求问大佬有没有懂的呀?

    或者实现网页截图有没有更好的思路呢?

    44 replies  •  2025-01-23 14:26:40 +08:00
    visper
    visper
    May 10, 2024❤️1
    1
    puppeteer
    DawnMoon
    DawnMoon
    May 10, 2024
    2
    他这个需求用一个无头浏览器就能实现,之前我用无头 Chromium 试过。
    juzisang
    juzisang
    May 10, 2024
    3
    能跑后端用无头浏览器,puppeteer 之类的。如果纯浏览器环境用 html2canvas
    v2er4241
    v2er4241
    May 10, 2024
    4
    关键词 html2canvas 。

    其实截图实现随便搜都有好多,不知道难在哪?看你的描述,可能是难在搜索?

    另外,这种问题问 gpt 马上就有答案。
    gray0
    gray0
    May 10, 2024
    6
    @gray0 一个 api 搞定
    codehz
    codehz
    May 10, 2024 via iPhone
    7
    这玩意无论如何都得加钱,不如用 https://developers.cloudflare.com/browser-rendering/
    flyqie
    flyqie
    May 10, 2024
    8
    @klo424 #4

    截图方案确实挺多。

    前端做的话 html2canvas ,后端做的话上无头浏览器。

    记得之前还用类似这种网站玩了点花活。。无头真的每家配的都不一样。
    ik
    ik
    May 10, 2024 via iPhone
    9
    无头浏览器是可以的
    echoZero
    echoZero
    May 10, 2024
    10
    后端用无头试试,我之前试过没问题的
    weeei
    weeei
    May 10, 2024❤️1
    11
    Firefox: --screenshot [url]
    Chrome: --headless --screenshot=image.png [url]

    都支持知道窗口大小:--window-size=1024,2550
    codingMayCry
    codingMayCry
    OP
    May 10, 2024
    12
    @klo424 html2canvas 不行,主要是网页会有视频,html2canvas 这玩意儿截不到
    zuiyue123
    zuiyue123
    May 10, 2024
    13
    写过这个功能,是通过后台 puppeteer 实现截图的,实现起来很简单
    businessch
    businessch
    May 10, 2024 via iPhone
    14
    windows 用 python 搞了个自用,直接调用 edge 无头浏览器,搭建个服务 http 提交 url 返回图片,缺点自用满足
    889434
    889434
    May 10, 2024
    15
    puppeteer 无头浏览器 nodejs 搭一下就行
    4Et5ShxMIq58n6Lr
    4Et5ShxMIq58n6Lr
    May 10, 2024
    16
    之前用过 html2canvas 还是有点小瑕疵的,不过大部分场景是 ok 的!
    Sayonaracc
    Sayonaracc
    May 10, 2024
    17
    puppeteer 搭配 node 写后台接口,调用的时候传网页地址就可以生成一张图片,注意在服务器上需要配置 chrome 的环境,推荐使用 docker 集成
    royalknight
    royalknight
    May 10, 2024
    18
    html2canvas 会有跨域问题,puppeteer 运行资源消耗比较多
    BornThisWay
    BornThisWay
    May 10, 2024
    19
    html2canvas 问题不要太多 svg 的 css 的 各种奇奇怪怪的问题
    简单的截个二维码这种是没啥问题
    xiaoqian713
    xiaoqian713
    May 10, 2024
    20
    LavaC
    LavaC
    May 10, 2024
    21
    puppeteer 没问题的,我有个几年前写的微博图片接口就是用它写的。
    不过要注意的是别用 chromium ,要用 chrome ,否则视频可能解析不出来,字体也得另外配一个防止乱码。
    StateMa
    StateMa
    May 10, 2024
    22
    前端我常用的就 domtoimg 这个库,只要有 dom 就能扒
    luzemin
    luzemin
    May 10, 2024
    23
    @weeei 试了下 Chrome headless 命令 无法截取 full page
    MagicCoder
    MagicCoder
    May 10, 2024❤️2
    24
    纯前端截图的话,最好的方法是通过 webrtc 实现。可以看看这个插件: https://www.kaisir.cn/js-screen-shot
    MzM2ODkx
    MzM2ODkx
    May 10, 2024
    25
    @StateMa 我觉得比 html2canvas 好
    Jasonwxy
    Jasonwxy
    May 10, 2024
    26
    这个我老早之前用 puppeter 写过一个截图的 node 服务
    然后上面说的 html2canvas 前一段时间也用过,感觉样式问题挺多,好多 css 属性不支持...
    https://html2canvas.hertzen.com/features 下面就有列 Unsupported CSS properties
    CJ2r4u3EH4lrM7aR
    CJ2r4u3EH4lrM7aR
    May 10, 2024
    27
    网页截图跨域问题无法解决。因此他们都放到服务端解析。
    CJ2r4u3EH4lrM7aR
    CJ2r4u3EH4lrM7aR
    May 10, 2024
    28
    比如目标网页包含第三方链接,或者包含地图,那你截出来的就是空白。
    Kakus
    Kakus
    May 10, 2024
    29
    前段时间刚好写过一个这样的工具,用的这个库:

    https://www.npmjs.com/package/capture-website
    imcsk
    imcsk
    May 10, 2024
    30
    用 Chrome 自带的截图行不行
    caesar
    caesar
    May 10, 2024
    31
    之前开发过一个,也是调用的,不过是生成缩略图的,稍微改下 就可以满足你要求
    zgsi
    zgsi
    May 10, 2024
    34
    提供一个思路 wkhtmltopdf
    CHTuring
    CHTuring
    May 10, 2024
    35
    不要用 html2canvas 各种小问题不断,用 https://www.npmjs.com/package/html-to-image 吧
    ginobefun
    ginobefun
    May 10, 2024
    36
    好奇这个需求什么场景用?
    hetal
    hetal
    May 10, 2024
    37
    @ginobefun 做分享海报等复杂的图片生成
    hazardous
    hazardous
    May 10, 2024
    38
    codingMayCry
    codingMayCry
    OP
    May 10, 2024
    39
    感谢各位大佬的回复,提供了非常多的思路,这边先准备用 Puppeteer 搭一个 nodejs 服务来实现了~
    looo
    looo
    May 10, 2024
    40
    Mac Arc 浏览器的内置的截图好用
    JRay
    JRay
    May 10, 2024
    41
    我之前是用的浏览器驱动直接访问截图,感觉还好
    fionasit007
    fionasit007
    May 11, 2024
    43
    几年前用过 PhantomJS ,是基于 WebKit ,不过现在貌似已经过时,但是部署起来比较麻烦,使用坑也多;现在选择的话直接自动化无头浏览器一把梭吧
    sead
    sead
    Jan 23, 2025
    44
    https://github.com/seadfeng/headless-browser-clusters

    改一下就可以变成截图 api 服务
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5633 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 146ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    ♥ Do have faith in what you're doing.