Skip to content
Danny Lin edited this page Mar 3, 2024 · 26 revisions

網頁剪貼簿常見問題

為什麼擷取網頁總是出現黃色的錯誤訊息?

黃色的文字是警告訊息而非錯誤訊息。警告訊息表示網頁有部分資訊無法正常處理,但整體而言網頁仍視為成功擷取。

發生警告的原因可根據發生錯誤的網址和錯誤訊息內容判斷,可能是:

  • 不合網頁標準的內容:可能是原始網頁本來就有,或被其他擴充套件寫入。
  • 串流影片:通常是網址開頭為 blob:<video> 元素。網頁剪貼簿無法擷取此類內容。
  • 被撤除的動態物件:其網址開頭通常為 blob:,通常是因原始網頁建立了動態物件網址後又撤除了其存取權。網頁剪貼簿無法擷取此類內容。
  • 擴充套件專屬內容:其網址開頭通常為 chrome-extension:moz-extension:。網頁剪貼簿無法擷取來自其他擴充套件的內容。
  • 擷取選項導致:可能有異常,也可能是正常(如資源檔案大小限制)。

出現警告訊息時,可檢查擷取的網頁是否有異常,若無問題通常可直接忽略警告;若確實有異常,可嘗試停用其他擴充套件(可能需要重新整理網頁)或使用不同的擷取選項。若問題仍持續發生,請向我們回報並附上完整日誌以利除錯。

為什麼擷取 Chrome 線上應用程式商店或 Firefox 附加元件站的頁面總是發生錯誤?

瀏覽器設有內建黑名單限制擴充套件不得存取套件下載及相關網站,以避免惡意套件造成安全問題。例如 Firefox 禁止存取 Firefox 附加元件站及一些 Mozilla 相關網站,Google Chrome 禁止存取 Chrome 線上應用程式商店,Opera 禁止存取 Opera 外掛程式網站等等。

由於網頁剪貼簿無法取得此內部黑名單,無法存取時只能比照一般情況顯示預設錯誤訊息,例如「The extensions gallery cannot be scripted.」、「Missing host permission for the tab」、或者更一般性的「Network request failed.」。

要繞過這個限制,最簡單的方法是使用不同的瀏覽器。有些瀏覽器也允許調整設定以移除限制(風險自負):

  • Firefox:開啟 about:config 並修改以下設定值:
    • extensions.webextensions.restrictedDomains: 移除相關網域。(資料來源
    • privacy.resistFingerprinting.block_mozAddonManager: 設為 true。(資料來源

為什麼 Google Chrome 擷取的頁面用其他瀏覽器開啟就看不到圖片?

這可能是該網站使用了 WebP 圖片所致。WebP 是較新的圖片格式,有較佳的壓縮率及傳輸速度,但目前只有 Chromium 系瀏覽器和 Firefox ≥ 65 支援。Google Chrome 擷取的 WebP 圖片在不支援的瀏覽器上無法顯示,就造成此問題。

要解決此問題,改用支援 WebP 格式的瀏覽器開啟擷取的頁面即可。若希望擷取的頁面能在更多瀏覽器正常呈現,可改用不支援 WebP 格式的瀏覽器擷取該頁面,因為網站通常會對不支援 WebP 的瀏覽器輸出 PNG、JPEG 等替代格式。

我已經在擷取選項設定了儲存圖片,為什麼有些網頁的圖片儲存下來只是一大片空白?

有些網頁會使用畫布(canvas)技術繪製動畫或較精細的圖片,其中有些畫布會在繪製後把繪製資訊清除,導致瀏覽器無法取得畫布內容,而變成一大塊空白。要擷取此類畫布必須改寫原網頁的繪製程式碼,但每個網頁寫法不同,並無一體適用的方法,只能個別客製工具。另一個較簡單的方法是以螢幕擷圖代替。

擷取選項勾選了「腳本」,但儲存的腳本無法運作?

擷取的頁面由於脫離了原伺服器環境且改寫了部分內容,儲存的腳本(JavaScript 等)和外掛程式(如 JAVA applet 或 Flash)可能無法正常運作,甚至在少數情況下嘗試執行會造成安全風險。

有時擷取的腳本是不可能運作的,例如我們不能預期擷取的 Gmail 頁面真的能收發電郵。有時無法運作與擷取時對網頁內容的改寫有關,一般建議將各擷取選項設為「儲存」並將「畫布」設為「儲存目前狀態」,可減少 DOM 改寫造成腳本無法運作的機會。有時擷取的腳本只要稍作改寫即可正常運作,但如何改寫視原來的寫法而定,沒有一體適用的規則。

有些網頁要向下捲動螢幕才會載入圖片或文字,有辦法不下拉就擷取完整頁面嗎?

由於每個網頁使用的延遲加載技術不同,沒有一體適用的方法。對於一些簡單的延遲加載機制,可設定 擷取助手 自動處理。

例如常見許多網頁的延遲加載是把真實圖片網址記錄在 data-src (或 data-srcset) 屬性,偵測到捲動時把 src (或 srcset) 屬性設定為此值載入,此時就可以設定擷取助手自動改寫 src (或 srcset) 屬性值:

[
  {
   "description": "save deferred images defined by data-*",
   "commands": [
     ["attr", {"css": "img[data-src]"}, "src", ["get_attr", null, "data-src"]],
     ["attr", {"css": "img[data-srcset]"}, "srcset", ["get_attr", null, "data-srcset"]]
   ]
  }
]

如何擷取本地網頁(file: 協定)?

Chromium 系瀏覽器在網頁剪貼簿的擴充套件設定頁面勾選「允許存取檔案網址」即可。Firefox 基於安全性考量,目前尚不允許擴充套件存取 file: 協定的頁面。

如何開啟 HTZ 或 MAFF 網頁封存檔?

可使用內建的封存頁面檢視器PyWebScrapBook 或其他輔助工具,或者用 ZIP 軟體解壓縮後開啟。其中 Chromium 系瀏覽器在擴充套件設定頁面勾選「允許存取檔案網址」,即可將檔案直接開啟於瀏覽器中,是安裝需求最低的做法;安裝 PyWebScrapBook 則是支援度最佳的做法。更多細節可參見檢視封存檔

注意各種方法可能各自有一些限制,例如對於內建的封存頁面檢視器:

  • 非常大的封存檔案(約 2 GiB)可能導致瀏覽器無法載入。
  • 封存檔中若有很大的單一檔案(約 400~500 MiB)可能因消耗太多記憶體導致擴充功能當掉。
  • 基於安全性考量及瀏覽器套件商店的規範限制,腳本無法在封存網頁檢視器中執行。
  • Chromium 系瀏覽器無法直接在框架頁中檢視封存頁面。這是因為有個未修正的臭蟲導致。

如何選擇擷取網頁的儲存格式?

各種儲存格式皆有優點,也都有不足之處,如何選擇端視需求而定,這就是它們都存在的理由。各種儲存格式的特性可參見擷取選項的說明,以下為簡單的摘要:

需求 資料夾 HTZ MAFF 單一 HTML
擷取可行性[1]
擷取效能[2] 最高
佔用空間[3] 最小
載入速度
檢視內容方便性[4] 最低
跨平台相容性[5] 最高
修改內容可行性[6]
轉檔可行性[7] 最高
可佈署為靜態網站[8]
與版本控制系統的相容性[9]

[1]: 「資料夾」格式與原站台架構最為相似,因而最為可靠,支援最多功能;其他格式由於為單一檔案,檔案總體積過大可能導致無法儲存,也不支援合併擷取。單一 HTML 網頁由於使用 data URL 技術,每個資源檔案都不能太大,如要讓舊瀏覽器可載入,大小限制會更嚴格;此格式無法保留原始網頁中某些複雜的循環參照結構,也不支援深層擷取。

[2]: 「資料夾」格式由於瀏覽器需要處理的檔案數目多,因此擷取速度較慢。「儲存擷取資料至」設定為「剪貼簿資料夾」時,使用 Chromium 系列瀏覽器可能因某些內建限制導致不便,例如:勾選「下載每個檔案前先詢問儲存位置」時,每下載一個檔案都會跳出詢問視窗;下載某些格式的檔案(如 .js 或 .exe)會自動跳出安全性警告,須逐個選擇「保留」才能下載。儲存至後端伺服器可繞過此問題。

[3]: HTZ 及 MAFF 皆使用壓縮技術,可使檔案縮小。單一 HTML 由於使用 data URL 技術,會使內嵌檔案大小膨脹為 4/3 倍,且缺乏有效的去重複技術,若頁面重複引用同一個很大的資源檔案,會導致檔案大幅膨脹。

[4]: 單一 HTML 只要使用支援的瀏覽器即可開啟,最為方便。資料夾格式由於使用者須尋找及開啟資料夾中的入口頁,方便性次之。HTZ 及 MAFF 需要輔助程式才能直接檢視,且未必所有平台都有方便的輔助程式可用,故方便性低;MAFF 由於格式較 HTZ 複雜,更難撰寫支援的輔助程式,故評分又更低。以上為綜論,若使用了後端伺服器及側欄系統,開啟及檢視四種格式都一樣方便。

[5]: 在最糟的情況下,ZIP 壓縮格式只要解壓縮即可如一般網頁瀏覽。單一 HTML 檔案需要瀏覽器支援某些技術,例如 data URL、iframe 的 srcdoc 屬性、以及 CSS 變數等等,因此跨瀏覽器相容性差,尤其是對舊瀏覽器而言。

[6]: 後端伺服器覆寫 ZIP 封存檔案必須解壓縮再重新壓縮,因而效能不佳,處理單一 HTML 檔案也會因為檔案太大而影響效能。另一方面,若是手工編輯原始碼,單一 HTML 檔案中的 data URL 字串容易干擾編輯,文字編輯器處理它們時也可能變慢甚至崩潰。

[7]: 資料夾格式及 HTZ 封存格式可完全互轉,但後者需要程式額外支援 ZIP 壓縮檔操作。MAFF 封存格式的內部結構較複雜,因而較不利程式處理。單一 HTML 檔案更為複雜,且無法保留原始頁面的某些資訊,因此通常更難用程式分析及轉檔。

[8]: HTZ 及 MAFF 須使用 PyWebScrapBook 或其他特別撰寫的伺服器佈署,否則使用者須在瀏覽器上安裝網頁剪貼簿套件或使用其他輔助工具才能直接瀏覽擷取的頁面。

[9]: 大部分版本控制系統(VCS),例如 Git 和 Mercurial,都是以處理文字為主。ZIP 壓縮格式需要安裝額外工具才能支援差異比對,版本合併則通常無法支援。版本控制系統可以處理單一 HTML 檔案的 HTML 原始碼,但處理較長的 data URL 字串可能會有麻煩。

如何設定把擷取資料儲存至預設下載資料夾以外的資料夾?

由於瀏覽器的安全限制,網頁剪貼簿只能自動下載資料到瀏覽器預設下載資料夾以下的資料夾。以下是幾種繞道做法:

1. 下載為單一檔案

如打算擷取為單一檔案,可以把 儲存擷取資料至 設定為「檔案」,並且設定瀏覽器每次下載檔案時詢問儲存位置(不同瀏覽器稍有差異),瀏覽器就會在每次下載擷取頁面時詢問,此時就可以指定任意儲存位置(通常會預設選擇上次儲存位置)。

2. 使用符號連結

如要自動擷取至特定位置,可設定符號連結(symbolic link)或 Windows 系統的目錄連接(directory junction)間接達成此目的。

例如在 Windows 系統下 <預設下載資料夾>C:\User\Test\Downloads,若想把資料儲存到 D:\ScrapBooks,可設定剪貼簿資料夾為 WebScrapBook,並在命令提示字元 (CMD) 用以下命令建立目錄連接:

MKLINK /J "C:\User\Test\Downloads\WebScrapBook" "D:\ScrapBooks"

/J 改為 /D 則可以建立符號連結,效果相似,但建立符號連結需要管理員權限。

若是在 Linux 系統,可使用以下命令:

ln -s /path/to/desired/directory ~/Downloads/WebScrapBook

3. 使用後端伺服器

在想要儲存資料的目錄架起後端伺服器,即可達到儲存資料至該目錄的目的。設定細節詳見基本操作頁面

為什麼網頁剪貼簿擷取的網頁比其他工具儲存的網頁更肥大?

網頁剪貼簿預設會盡可能儲存網頁的完整資訊,因此會佔用較多空間。如有節省空間的需求,可調整選項去除一些次要資訊。

例如,把圖片、音訊、視訊設為「儲存現用」,把「改寫樣式表」設為「進階整理」,或把「移除隱藏元素」設為「移除不顯示的元素」,在多數情況下可大幅縮小檔案,這些選項也是不少網頁擷取工具的預設做法。但這些設定都有潛在的副作用,決定前請詳閱各選項的說明。

此外,也可以考慮選擇不同的儲存格式,例如 ZIP 壓縮的封存格式比其他格式更節省空間(詳見相關章節)。

是否可以把其他工具儲存的網頁匯入剪貼簿?

可以,先把要匯入的網頁整理在一個資料夾下,安裝 PyWebScrapBook,然後在命令列執行以下命令:

wsb convert file2wsb /path/to/data-folder /path/to/webscrapbook

即可把這些網頁匯入到一個新建立的剪貼簿。接著可以把其中的項目轉移到其他剪貼簿

早期用網頁剪貼簿擷取了一些網頁,開始使用 PyWebScrapBook 後端伺服器後,如何把這些網頁加入後端伺服器的剪貼簿?

把這些網頁的實體檔案複製至後端伺服器的剪貼簿設定的 data 目錄下,啟動後端伺服器,到網頁剪貼簿選項勾選「自動為偵測到的新頁面建立元資料並加入根目錄」並執行檢測器,即可把未加入目錄列表的網頁自動加入。

或者也可以在命令列進入剪貼簿根目錄執行 wsb check --resolve-unindexed-files

也可以用前述方法,把這些網頁匯入新剪貼簿再搬移。

Clone this wiki locally