Readme
This commit is contained in:
1 file changed
+192
@@ -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