使用JavaScript實現(xiàn)獲取頁面上所有的img并保存本地
瀏覽器的 JavaScript 環(huán)境中受限于安全和隱私原因,不允許直接指定下載文件夾或訪問本地文件系統(tǒng)。因此,無法通過純 JavaScript 在瀏覽器控制臺中實現(xiàn)下載圖片到指定文件夾的功能。
然而,您可以使用 Web API 提供的文件系統(tǒng)訪問 API 進(jìn)行一定程度的操作,但需要用戶手動確認(rèn)和操作。以下是一個在支持文件系統(tǒng)訪問 API 的瀏覽器(如 Chrome)中使用的示例腳本:
(async () => {
// 獲取所有圖像元素
const images = document.querySelectorAll("img");
// 文件系統(tǒng)訪問 API:請求用戶選擇下載文件夾
const dirHandle = await window.showDirectoryPicker();
for (let [index, img] of images.entries()) {
try {
const url = img.src;
const response = await fetch(url);
const blob = await response.blob();
// 獲取圖片的 MIME 類型并確定文件擴展名
const contentType = blob.type;
let extension = contentType.split("/")[1]; // 從 MIME 類型中提取文件擴展名
// 特別處理 SVG 圖片格式
if (contentType === "image/svg+xml") {
extension = "svg";
}
const fileName = `${index + 1}.${extension}`;
// 創(chuàng)建并寫入文件
const fileHandle = await dirHandle.getFileHandle(fileName, {
create: true,
});
const writable = await fileHandle.createWritable();
await writable.write(blob);
await writable.close();
console.log(`Downloaded: ${fileName}`);
} catch (error) {
console.error(`Failed to download image ${index + 1}:`, error);
}
}
})();
此腳本的工作方式如下:
- 獲取當(dāng)前頁面的所有
img標(biāo)簽。 - 使用文件系統(tǒng)訪問 API 請求用戶選擇下載文件夾(此操作需要用戶確認(rèn))。
- 遍歷每個圖片 URL,使用
fetch函數(shù)獲取圖片數(shù)據(jù)。 - 在用戶選擇的文件夾中創(chuàng)建對應(yīng)的文件,并將圖片數(shù)據(jù)寫入文件。
請注意,此方法僅在支持文件系統(tǒng)訪問 API 的瀏覽器(如 Chrome)中可用,并且用戶需要手動確認(rèn)并選擇下載文件夾。
要在瀏覽器控制臺中執(zhí)行此腳本,請按照以下步驟操作:
- 打開你要下載圖片的網(wǎng)頁。
- 按
F12或Ctrl + Shift + I(Windows)或Cmd + Option + I(Mac)打開開發(fā)者工具。 - 選擇“Console”標(biāo)簽頁。
- 將上面的腳本代碼粘貼到控制臺中,然后按
Enter鍵執(zhí)行。
執(zhí)行腳本時,瀏覽器會彈出文件夾選擇對話框,用戶選擇文件夾后,腳本會自動將所有圖片下載并保存到該文件夾中。
知識補充
除了上文的內(nèi)容,小編還為大家整理了使用js腳本一鍵下載網(wǎng)頁所有圖片的方法,希望對你有所幫助
測試環(huán)境:Chrome開發(fā)者模式下(啟動Chrome,按F12即可)
測試網(wǎng)頁:知乎某問題
原理很簡單,用到了a標(biāo)簽的href及download屬性和點擊事件。
完整代碼
//一個對象,存儲頁面圖片數(shù)量和下載的數(shù)量
var monitorObj = {
imgTotal: 0,
imgLoaded: 0
}
//創(chuàng)建a標(biāo)簽,賦予圖片對象相關(guān)屬性,并插入body
var createA = function (obj) {
var a = document.createElement("a");
a.id = obj.id;
a.target = "_blank";//注意:要在新頁面打開
a.href = obj.url;
a.download = obj.url;
document.body.appendChild(a);
}
//獲取頁面的圖片
var imgs = document.images;
//創(chuàng)建每個圖片對象的對應(yīng)a標(biāo)簽
for (var i = 0; i < imgs.length;i++){
var obj = {
id: "img_" + i,
url: imgs[i].src
}
//過濾掉不屬于這幾種類型的圖片
if (["JPG", "JPEG", "PNG","GIF"].indexOf(obj.url.substr(obj.url.lastIndexOf(".")+1).toUpperCase()) < 0) {
continue;
}
//這里是為了去掉知乎用戶頭像的圖片,頭像大小是50*50
if (imgs[i].width <= 50 || imgs[i].height <= 50) {
continue;
}
//統(tǒng)計圖片數(shù)量
monitorObj.imgTotal++;
createA(obj);
}
//開始下載圖片
for (var i = 0; i < imgs.length; i++) {
if (document.getElementById("img_" + i)) {
//重點:觸發(fā)a標(biāo)簽的click事件
document.getElementById("img_" + i).click();
monitorObj.imgLoaded++; //統(tǒng)計已下載的圖片數(shù)量
}
}
console.log("已下載:"+monitorObj.imgLoaded + "/" + monitorObj.imgTotal);到此這篇關(guān)于使用JavaScript實現(xiàn)獲取頁面上所有的img并保存本地的文章就介紹到這了,更多相關(guān)JavaScript獲取頁面img內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
XHTML-Strict 內(nèi)允許出現(xiàn)的標(biāo)簽
XHTML-Strict 內(nèi)允許出現(xiàn)的標(biāo)簽...2006-12-12
Three.js物理引擎Cannon.js創(chuàng)建簡單應(yīng)用程序
uniapp自定義頁面跳轉(zhuǎn)loading的實現(xiàn)代碼
javascript實現(xiàn)九宮格相加數(shù)值相等
深入理解JavaScript和TypeScript中的class

