Update
This commit is contained in:
275
README.md
275
README.md
@@ -1,2 +1,275 @@
|
||||
# coursera-copy
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user