V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiguaprince
V2EX  ›  前端开发

[请教] 大佬们,怎么通过 js 把网页保存成 html 呢?

  •  
  •   xiguaprince · 89 天前 · 1550 次点击
    这是一个创建于 89 天前的主题,其中的信息可能已经有所发展或是发生改变。
    google 和 V2EX 上都搜了一下,但是没有看到比较直接的方案。
    都说直接浏览器保存 或者使用 singleFile 或者 save page 来保存。

    那么有 js 库 或者 什么方案吗?
    第 1 条附言  ·  89 天前
    不是想保存成文件,而是获取带样式和图片 base64 的 html 文本
    第 2 条附言  ·  88 天前
    是通过 js 把 dom 转成那种带内联样式和图片的 mht 或者 html
    17 条回复    2024-08-25 12:59:03 +08:00
    NoOneNoBody
        1
    NoOneNoBody  
       89 天前
    因为页面内 js 不能操作文件,不然可以存木马了,所以需要扩展或可操作本地文件的程序
    xiguaprince
        2
    xiguaprince  
    OP
       89 天前
    @NoOneNoBody 不操作文件,只是把 dom 转成单个 mht 格式的 string , 这个有什么现成的库吗
    xiguaprince
        3
    xiguaprince  
    OP
       89 天前   ❤️ 1
    实在不行 我只能扒现成插件的代码了 呜呜呜
    xiguaprince
        4
    xiguaprince  
    OP
       89 天前
    怎么有人还感谢我
    NoOneNoBody
        5
    NoOneNoBody  
       89 天前
    没有这样的库,还是那个原因:页面 js 不能操作本地文件
    js 读不到浏览器缓存,所以,js 要转图片为 base64 ,需要重新请求一遍,通过 canvas 转 base64
    而且还有前置工作是 parse 整个页面,还有非图片的二进制文件如字体,我还想不到怎么做,还有跨域问题,归结一句就是个单页面爬虫了,不如发给其他工具完成
    但扩展是有权限读取缓存的,所以就容易很多了

    这复杂程度,个人觉得页面 js 不能完成,起码要扩展或者发送给外部完成
    shizhibuyu2023
        6
    shizhibuyu2023  
       89 天前
    这又没啥难度,随便手撸下就能粗略地实现,想更完善就去 npm 搜呗,多到你都挑不过来
    imdong
        7
    imdong  
       89 天前 via iPhone
    也许有一个方案,仅猜测。

    pwa 的方式,在 worker 中拦截流量,最后将记录下的数据处理后替换或者重新生成。

    但只适合自己的站点。

    理论哈,不确定是否可以。
    kkocdko
        8
    kkocdko  
       88 天前   ❤️ 1
    这里有一个简陋版的实现,你可以抄一下,根据实际情况改改。

    !请注意,不可能适配所有页面,不可能适配所有页面!总是会有局限性的。

    https://github.com/kkocdko/user-scripts/tree/master/scripts/save-page
    subframe75361
        9
    subframe75361  
       88 天前
    document.documentElement.innerHTML ?
    fyq
        10
    fyq  
       88 天前
    可以考虑装一个油猴插件,然后写一个油猴脚本,在网页上插入一个按钮,点一下把你要的这些 html 文本复制到剪贴板里去处理。
    不会没关系,具体代码可以让 ChatGPT 帮你写。
    cpstar
        11
    cpstar  
       88 天前
    zeusho871
        12
    zeusho871  
       88 天前
    blob
    noqwerty
        13
    noqwerty  
       88 天前
    ZztGqk
        14
    ZztGqk  
       88 天前   ❤️ 1
    而是获取带样式和图片 base64 的 html 文本?所以是在找 parser ? https://developer.mozilla.org/en-US/docs/Web/API/DOMParser
    xiguaprince
        15
    xiguaprince  
    OP
       88 天前 via Android
    @ZztGqk 应该是这样,不过仅凭它能把 dom 转成带图片和所有样式的 html/mhtml 吗
    xiguaprince
        16
    xiguaprince  
    OP
       88 天前 via Android
    @kkocdko 感谢!是这种!一会我运行下看看效果
    xiguaprince
        17
    xiguaprince  
    OP
       88 天前 via Android
    还有哪位大佬知道呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3422 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:52 · PVG 18:52 · LAX 02:52 · JFK 05:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.