[请教] 大佬们,怎么通过 js 把网页保存成 html 呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiguaprince
V2EX    前端开发

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

  •  
  •   xiguaprince 2024-08-24 16:15:23 +08:00 2026 次点击
    这是一个创建于 417 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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     Solana     4821 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:47 PVG 17:47 LAX 02:47 JFK 05:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86