# Coursera 課程備份工具 這個工具可以幫助你備份 Coursera 課程內容到本地裝置,包括影片、文字內容和字幕。 ## 功能特色 - ✅ 自動登入 Coursera 帳號 - ✅ 下載課程影片 - ✅ 下載影片字幕/逐字稿 - ✅ 下載課程文字資料 - ✅ 支援批次下載多個課程 - ✅ 自動整理課程檔案結構 - 🔒 多層級反機器人偵測機制 ## 安裝步驟 ### 1. 安裝 Python 確保你的電腦已安裝 Python 3.8 或更高版本。可以到 [Python 官網](https://www.python.org/downloads/) 下載。 ### 2. 安裝相依套件 在專案目錄下執行: ```bash pip install -r requirements.txt ``` ### 3. 設定 Chrome 瀏覽器 這個工具使用 Selenium 和 Chrome 瀏覽器來模擬登入和下載。請確保: - 已安裝 Google Chrome 瀏覽器 - 程式會自動下載對應的 ChromeDriver ## 使用方法 ### 1. 建立配置檔案 複製 `config.example.json` 並重新命名為 `config.json`: ```bash copy config.example.json config.json ``` ### 2. 編輯配置檔案 在 `config.json` 中填入你的資訊: ```json { "email": "your-email@example.com", "password": "your-password", "output_dir": "downloads", "download_videos": true, "download_subtitles": true, "download_resources": true, "headless": false, "course_urls": [ "https://www.coursera.org/learn/your-course-name" ] } ``` **配置說明:** - `email`: 你的 Coursera 帳號 - `password`: 你的 Coursera 密碼 - `output_dir`: 下載檔案的儲存目錄 - `download_videos`: 是否下載影片(true/false) - `download_subtitles`: 是否下載字幕(true/false) - `download_resources`: 是否下載其他資源(true/false) - `headless`: 是否使用無頭模式(true 為背景執行,false 會顯示瀏覽器視窗) - `delay_between_requests`: 請求間隔秒數(建議 3-5 秒,避免被偵測) - `random_delay`: 是否使用隨機延遲(true 更安全) - `max_retries`: 失敗重試次數 - `course_urls`: 要下載的課程網址列表 ### 3. 執行程式 ```bash python coursera_downloader.py ``` ## 檔案結構 下載完成後,檔案會按照以下結構組織: ``` downloads/ └── 課程名稱/ ├── course_info.json # 課程資訊 ├── Week_1/ # 第一週內容 │ ├── video1.mp4 │ ├── subtitle1.vtt │ └── reading1.txt ├── Week_2/ │ └── ... └── ... ``` ## 重要注意事項 ⚠️ **法律與道德考量** 1. **僅供個人學習使用**:下載的課程內容僅供你個人學習和備份使用 2. **尊重版權**:請勿分享、轉售或公開傳播下載的內容 3. **遵守服務條款**:使用本工具前請確認你已閱讀並同意 Coursera 的服務條款 4. **帳號安全**:`config.json` 包含你的密碼,請勿分享此檔案 ⚠️ **帳號安全與異常活動** 1. **不影響課程資料**:此工具僅讀取和下載內容,不會影響你的測驗成績、作業記錄或課程進度 2. **異常活動風險**:頻繁的自動化操作可能被 Coursera 偵測為異常活動,建議: - **使用適當延遲**:保持 3-5 秒的請求間隔 - **啟用隨機延遲**:讓操作更像人類行為 - **避免過度使用**:不要在短時間內下載大量課程 - **離峰時段使用**:避開平台高峰時段 - **分批下載**:一次下載一個課程,間隔一段時間再下載下一個 3. **帳號風險**:雖然工具已加入反偵測機制,但仍有可能觸發 Coursera 的安全警報,請自行評估風險 ⚠️ **技術限制** 1. **需要有效的課程註冊**:你必須已經註冊了該課程才能下載內容 2. **網路連線**:下載過程需要穩定的網路連線 3. **Coursera 網站變更**:如果 Coursera 更改網站結構,程式可能需要更新 4. **下載速度**:視課程大小和網路速度而定,可能需要較長時間 5. **異常活動偵測**:為避免觸發 Coursera 的安全機制,程式已加入延遲和隨機化,建議: - 不要在短時間內下載過多課程 - 使用建議的延遲設定(3-5 秒) - 避免頻繁重複執行 - 選擇離峰時段使用 ## 進階使用 ### 自訂下載選項 你可以根據需求修改 `config.json` 中的設定: - 只下載字幕:設定 `"download_videos": false` - 背景執行:設定 `"headless": true` - 批次下載:在 `course_urls` 陣列中加入多個課程網址 - 調整安全性: - `"delay_between_requests": 5` - 增加延遲時間(更安全但更慢) - `"random_delay": true` - 啟用隨機延遲(強烈建議) - `"headless": false` - 顯示瀏覽器視窗(便於監控和除錯) ### 安全使用建議 為了降低帳號風險和避免被偵測: 1. **首次使用**:建議先用 `headless: false` 觀察程式行為 2. **測試運行**:先測試下載單一課程的少量內容 3. **分散下載**:每天最多下載 1-2 個課程 4. **避免重複**:不要對同一課程重複執行下載 5. **監控日誌**:注意程式輸出的錯誤訊息 6. **帳號狀態**:定期檢查 Coursera 帳號是否正常 7. **使用預設設定**:不要修改延遲時間至過低(< 2 秒) 8. **離峰時段**:建議在晚上或週末使用 9. **分批處理**:如果要下載多個課程,每個課程間隔 12-24 小時 ### 疑難排解 **問題:無法登入** - 檢查帳號密碼是否正確 - 確認 Coursera 帳號狀態正常 - 嘗試關閉 headless 模式查看錯誤 - 檢查是否有雙重驗證(2FA)啟用 **問題:被標記為異常活動** - 增加 `delay_between_requests` 到 5-10 秒 - 確保 `random_delay` 設為 `true` - 設定 `headless: false` 以模擬真實瀏覽器行為 - 暫停使用一段時間(24-48 小時) - 嘗試在不同時段使用 - 清除瀏覽器 cookies 並重新登入 - 檢查是否使用 VPN,嘗試關閉或更換 IP **問題:找不到影片** - Coursera 網站結構複雜且經常變更 - 可能需要手動調整程式碼來適應特定課程 - 建議使用瀏覽器開發者工具分析頁面結構 **問題:下載速度慢** - 這是正常現象,延遲設定越高越慢但越安全 - 影片檔案較大需要時間 - 可以在離峰時段下載 ## 開發資訊 - **語言**: Python 3.8+ - **主要套件**: - `selenium` - 網頁自動化 - `yt-dlp` - 影片下載 - `requests` - HTTP 請求 - `beautifulsoup4` - HTML 解析 - **多層級反機器人偵測機制**: - ✅ 隱藏 Selenium webdriver 特徵 - ✅ 偽裝 navigator 屬性(plugins, languages 等) - ✅ 模擬人類滑鼠移動軌跡 - ✅ 模擬真實打字速度(含停頓與節奏變化) - ✅ 隨機化滾動行為 - ✅ 隨機延遲與等待時間 - ✅ 完整的瀏覽器 Headers(User-Agent, Accept, Referer 等) - ✅ Chrome DevTools Protocol (CDP) 設定 - ✅ 禁用自動化標記和擴充功能 ## 授權 請參考 LICENSE 檔案。 ## 免責聲明 本工具僅供學習和研究使用。使用者應自行承擔使用本工具的所有風險和責任。開發者不對使用本工具導致的任何問題負責,包括但不限於: - 違反 Coursera 服務條款 - 帳號被封鎖或停用 - 觸發異常活動警報 - 版權糾紛 - 資料遺失 - 課程存取權限被撤銷 **重要提醒**: - 本工具使用自動化技術存取 Coursera,可能違反其服務條款 - 雖然已加入安全機制,但無法保證完全不被偵測 - 建議僅用於已購買或正式註冊的課程進行個人備份 - 不建議頻繁或大量使用 使用本工具即表示你理解並接受上述所有風險和限制。 ## 技術細節 ### 反機器人偵測技術 本工具實現了多層級的反偵測機制: 1. **瀏覽器指紋偽裝** - 移除 `navigator.webdriver` 屬性 - 偽裝 `navigator.plugins` 和 `navigator.languages` - 添加 `window.chrome` 物件 - 使用 Chrome DevTools Protocol 覆寫 User-Agent 2. **人類行為模擬** - 滑鼠移動軌跡:使用 ActionChains 模擬真實移動 - 打字節奏:隨機按鍵間隔和偶爾停頓 - 滾動行為:隨機滾動距離和速度 - 點擊前移動:模擬滑鼠移動到元素再點擊 3. **網路請求偽裝** - 完整的 HTTP Headers(Accept, Accept-Language, Accept-Encoding) - Referer 設定 - 請求間隨機延遲 - Keep-alive 連線 4. **Selenium 特徵隱藏** - 禁用自動化控制標記 - 移除 `enable-automation` 開關 - 禁用自動化擴充功能 - 使用新版 headless 模式 ### 為什麼還是可能被偵測? 儘管已做了充分的偽裝,但以下情況仍可能被偵測: - 行為模式分析:大量下載、無人類交互 - Canvas/WebGL 指紋:更進階的瀏覽器指紋識別 - 時間分析:過於精確的時間間隔 - IP 與地理位置:異常的登入地點 - 系統資源使用模式的差異 ## 貢獻 歡迎提出 Issue 或 Pull Request 來改進這個工具! --- **最後更新**: 2025-12-16