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

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

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

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

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

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

    但只适合自己的站点。

    理论哈,不确定是否可以。
    kkocdko
        8
    kkocdko  
       2024-08-24 21:28:08 +08:00   ❤️ 1
    这里有一个简陋版的实现,你可以抄一下,根据实际情况改改。

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

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