Readme
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
# Yandex Disk Protected Folder Downloader
|
||||
|
||||
Скрипт для рекурсивного скачивания большой публичной папки Яндекс Диска, защищённой паролем.
|
||||
|
||||
Скрипт использует cookie `passToken`, скачивает каждый файл отдельно и не пытается сформировать единый ZIP-архив.
|
||||
|
||||
## Возможности
|
||||
|
||||
* скачивание защищённой публичной папки;
|
||||
* рекурсивный обход вложенных каталогов;
|
||||
* сохранение исходной структуры папок;
|
||||
* скачивание файлов по одному;
|
||||
* продолжение прерванной загрузки через `wget --continue`;
|
||||
* автоматический пропуск полностью скачанных файлов;
|
||||
* проверка размера скачанного файла;
|
||||
* автоматическая пагинация списка файлов;
|
||||
* остановка при появлении CAPTCHA;
|
||||
* сохранение ссылки CAPTCHA в текстовый файл;
|
||||
* паузы между запросами для снижения вероятности блокировки;
|
||||
* повторный запуск без потери уже скачанных данных.
|
||||
|
||||
## Требования
|
||||
|
||||
Поддерживается Linux с Python 3.
|
||||
|
||||
Необходимые пакеты:
|
||||
|
||||
```bash
|
||||
sudo apt install -y python3 python3-requests wget
|
||||
```
|
||||
|
||||
## Настройка
|
||||
|
||||
Все основные параметры находятся в начале файла:
|
||||
|
||||
```python
|
||||
TARGET_URL = (
|
||||
"https://disk.yandex.ru/d/"
|
||||
"cWn4RgSdFcSZXw/ODIS/Flashdaten/Brand-V"
|
||||
)
|
||||
|
||||
PASS_TOKEN = ""
|
||||
|
||||
OUTPUT_DIR = "/mnt/hdd1-4TB/ODIS/Flashdaten/Brand-V"
|
||||
```
|
||||
|
||||
### TARGET_URL
|
||||
|
||||
Полная ссылка на скачиваемую папку Яндекс Диска:
|
||||
|
||||
```python
|
||||
TARGET_URL = "https://disk.yandex.ru/d/cWn4RgSdFcSZXw/ODIS/Flashdaten/Brand-V"
|
||||
```
|
||||
|
||||
### PASS_TOKEN
|
||||
|
||||
Значение cookie `passToken`, полученное после ввода пароля в браузере.
|
||||
|
||||
Можно указать только значение:
|
||||
|
||||
```python
|
||||
PASS_TOKEN = "значение_cookie_passToken"
|
||||
```
|
||||
|
||||
### OUTPUT_DIR
|
||||
|
||||
Каталог, куда будут сохранены файлы:
|
||||
|
||||
```python
|
||||
OUTPUT_DIR = "/mnt/hdd1-4TB/ODIS/Flashdaten/Brand-V"
|
||||
```
|
||||
|
||||
Каталог будет создан автоматически, если у пользователя есть права на его создание.
|
||||
|
||||
## Пример вывода
|
||||
|
||||
```text
|
||||
[INFO] Открываю исходную ссылку...
|
||||
[INFO] Папка открыта.
|
||||
[INFO] Корневой hash: public_hash:
|
||||
|
||||
[DIR ] /mnt/hdd1-4TB/ODIS/Flashdaten/Brand-V
|
||||
[GET ] /mnt/hdd1-4TB/ODIS/Flashdaten/Brand-V/038997016C__7000.sgo (1.75 MiB)
|
||||
[WAIT] 2.4 с перед запросом ссылки
|
||||
2026-07-19 URL:https://downloader.disk.yandex.ru/... [1835008/1835008]
|
||||
[PAGE] получено=41, следующий offset=41, completed=False
|
||||
[WAIT] 4.2 с перед следующей страницей
|
||||
```
|
||||
|
||||
После завершения выводится статистика:
|
||||
|
||||
```text
|
||||
================ РЕЗУЛЬТАТ ================
|
||||
Найдено файлов: 4500
|
||||
Скачано сейчас: 250
|
||||
Уже было скачано: 4250
|
||||
Ошибок: 0
|
||||
Известный общий объём: 115.40 GiB
|
||||
===========================================
|
||||
```
|
||||
|
||||
## CAPTCHA
|
||||
|
||||
При большом количестве запросов Яндекс может вернуть CAPTCHA.
|
||||
|
||||
Скрипт распознаёт ответ:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "captcha"
|
||||
}
|
||||
```
|
||||
|
||||
После этого загрузка немедленно прекращается.
|
||||
|
||||
Будет выведена ссылка:
|
||||
|
||||
```text
|
||||
ЯНДЕКС ПОТРЕБОВАЛ CAPTCHA
|
||||
|
||||
Открой ссылку ниже в обычном браузере с того же внешнего IP:
|
||||
|
||||
https://disk.yandex.ru/showcaptcha?...
|
||||
```
|
||||
|
||||
Ссылка также сохраняется в файл:
|
||||
|
||||
```text
|
||||
/mnt/hdd1-4TB/ODIS/Flashdaten/Brand-V/yandex-captcha-url.txt
|
||||
```
|
||||
|
||||
## Настройка задержек
|
||||
|
||||
### FILE_DELAY_MIN и FILE_DELAY_MAX
|
||||
|
||||
Случайная задержка перед запросом прямой ссылки на каждый файл:
|
||||
|
||||
```python
|
||||
FILE_DELAY_MIN = 1.5
|
||||
FILE_DELAY_MAX = 3.5
|
||||
```
|
||||
|
||||
Скрипт будет ждать от 1.5 до 3.5 секунды перед каждым запросом `download-url`.
|
||||
|
||||
### PAGE_DELAY_MIN и PAGE_DELAY_MAX
|
||||
|
||||
Задержка между страницами списка файлов:
|
||||
|
||||
```python
|
||||
PAGE_DELAY_MIN = 3.0
|
||||
PAGE_DELAY_MAX = 6.0
|
||||
```
|
||||
|
||||
### COOLDOWN_EVERY_FILES
|
||||
|
||||
Количество запросов файлов, после которого выполняется длинная пауза:
|
||||
|
||||
```python
|
||||
COOLDOWN_EVERY_FILES = 100
|
||||
```
|
||||
|
||||
При значении `100` длинная пауза выполняется после каждых 100 запросов.
|
||||
|
||||
### COOLDOWN_MIN и COOLDOWN_MAX
|
||||
|
||||
Диапазон длительной паузы:
|
||||
|
||||
```python
|
||||
COOLDOWN_MIN = 60.0
|
||||
COOLDOWN_MAX = 120.0
|
||||
```
|
||||
|
||||
После каждых 100 запросов скрипт будет ждать от 60 до 120 секунд.
|
||||
|
||||
## Коды завершения
|
||||
|
||||
Скрипт использует следующие коды выхода:
|
||||
|
||||
| Код | Значение |
|
||||
| ----: | ------------------------------------------ |
|
||||
| `0` | загрузка завершена без ошибок |
|
||||
| `1` | загрузка завершена с ошибками |
|
||||
| `2` | ошибка конфигурации или отсутствует `wget` |
|
||||
| `75` | Яндекс потребовал CAPTCHA |
|
||||
| `130` | процесс остановлен через `Ctrl+C` |
|
||||
|
||||
Проверить код после завершения:
|
||||
|
||||
```bash
|
||||
echo $?
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user