346 字
2 分鐘
下載 Blob 圖片,以 HyRead 為例
2024-05-13
無標籤

HyRead 是我平常就有在用的電子書平台,提供網頁、App 閱讀的方式。網頁版的電子書是以圖片來傳輸,且受到 DRM 保護。原始載入的圖片是有加密的,透過前端進行解密,並顯示在網頁上。除了螢幕截圖外,有沒有程式化的方法可以將它下載下來?目前想到兩個方法:

  1. 研究 JS 解密原理,重新實做一遍
  2. 將已經解密的圖片下載下來

顯然方法二比較簡單,來說明如何實現


HyRead 的圖片加密#

這裡以試閱模式為例,我們先觀察他的圖片從哪裡下載,會發現有一個大檔案,從下面這路徑被下載,而且是加密過的圖片,網頁透過前端進行解密。

https://service.ebook.hyread.com.tw/ebookservice/comic/isTrialxx/xxx

再來到 HTML 發現該圖片的路徑是 blob 開頭如下圖所示,但是點開圖片連結是無效的,原因為這是透過前端解密後塞進去的。


Blob 下載#

我們透過前端存取解密後的圖片,並將內容放到 Canvas 中,就可以匯出圖片的 Base64。

var image = document.querySelectorAll("img")[1];
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.width = image.naturalWidth;
canvas.height = image.naturalHeight;
ctx.drawImage(image, 0, 0);
var base64String = canvas.toDataURL('image/png');

要下載的圖片的話,可以透過以下語法

var downloadLink = document.createElement('a');
downloadLink.href = base64String;
downloadLink.download = 'image.png';
downloadLink.click();