我们能用chrome.downloads.download下载完整的网页吗?(Google Chrome扩展)

Can we download a webpage completely with chrome.downloads.download? (Google Chrome Extension)

本文关键字:网页 Google 扩展 Chrome chrome downloads download 下载 我们      更新时间:2023-09-26

我想保存一个wabpage完全从我的谷歌Chrome扩展。我添加了"downloads", "<all_urls>"权限,并确认以下代码将Google页面保存到google.html

  chrome.downloads.download(
            { url: "http://www.google.com",
              filename: "google.html" },
            function (x) { console.log(x); })

但是,这段代码只保存html文件。样式表、脚本和图像不会被保存。我想完全保存这个网页,就像我保存这个带有对话框的页面一样,选择Format: Webpage, Complete

我查阅了文件,但找不到方法。

所以我的问题是:我怎么能下载一个网页完全从一个扩展使用api(s)的谷歌浏览器?

downloads API只下载单个资源。如果你想保存一个完整的网页,那么你可以先打开网页,然后使用chrome.pageCapture.saveAsMHTML将其导出为MHTML,使用URL.createObjectURL为导出的Blob创建blob: -URL,最后使用chrome.downloads.download API保存此URL。

pageccapture API需要一个有效的tabId。例如:

// Create new tab, wait until it is loaded and save the page
chrome.tabs.create({
    url: 'http://example.com'
}, function(tab) {
    chrome.tabs.onUpdated.addListener(function func(tabId, changeInfo) {
        if (tabId == tab.id && changeInfo.status == 'complete') {
            chrome.tabs.onUpdated.removeListener(func);
            savePage(tabId);
        }
    });
});
function savePage(tabId) {
    chrome.pageCapture.saveAsMHTML({
        tabId: tabId
    }, function(blob) {
        var url = URL.createObjectURL(blob);
        // Optional: chrome.tabs.remove(tabId); // to close the tab
        chrome.downloads.download({
            url: url,
            filename: 'whatever.mhtml'
        });
    });
}

试一下,把前面的代码放在background.js
manifest.json添加权限(如下所示)并重新加载扩展。然后example.com将被打开,网页将被保存为一个独立的MHTML文件。

{
    "name": "Save full web page",
    "version": "1",
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"]
    },
    "permissions": [
        "pageCapture",
        "downloads"
    ]
}

不,它不会为您下载所有文件:图像,js, css等。你应该使用像HTTRACK.

这样的工具。