diff --git a/.gitignore b/.gitignore
index 40a2d17..61074db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ config.yml
**/tempCodeRunnerFile.py
.vscode/
node_modules/
+Downloads/
# Created by https://www.toptal.com/developers/gitignore/api/python,visualstudiocode,pycharm+all,virtualenv
# Edit at https://www.toptal.com/developers/gitignore?templates=python,visualstudiocode,pycharm+all,virtualenv
diff --git a/docs/README.md b/docs/README.md
index 74f284d..6b08134 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -58,25 +58,28 @@ Python CLI tool download sách từ VNULIB
---
-- [✨ VNULIB DOWNLOADER ✨](#-vnulib-downloader-)
- - [🎆 CHỨC NĂNG](#-chức-năng)
- - [🥂 DEMO](#-demo)
- - [🪴 HƯỚNG DẪN SỬ DỤNG](#-hướng-dẫn-sử-dụng)
- - [1️⃣ Tải tool](#1️⃣-tải-tool)
- - [2️⃣ Sử dụng](#2️⃣-sử-dụng)
- - [⚙️ NÂNG CAO](#️-nâng-cao)
- - [🗃️ Pre-config](#️-pre-config)
- - [⛏️ Command line arguments](#️-command-line-arguments)
- - [📦 Docker](#-docker)
- - [🤐 Python](#-python)
- - [🤔 NOTES](#-notes)
- - [Giải thích thuật ngữ](#giải-thích-thuật-ngữ)
- - [👨💻 DEVELOP / CONTRIBUTE](#-develop--contribute)
- - [📓 TODO](#-todo)
- - [📝 LICENSE](#-license)
- - [🤥 DISCLAIMER](#-disclaimer)
- - [😌 CREDIT](#-credit)
- - [⭐ STARGAZER](#-stargazer)
+
+
+- [🎆 CHỨC NĂNG](#%F0%9F%8E%86-ch%E1%BB%A9c-nang)
+- [🥂 DEMO](#%F0%9F%A5%82-demo)
+- [🪴 HƯỚNG DẪN SỬ DỤNG](#%F0%9F%AA%B4-h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-s%E1%BB%AD-d%E1%BB%A5ng)
+ - [1️⃣ Tải tool](#1%EF%B8%8F%E2%83%A3-t%E1%BA%A3i-tool)
+ - [2️⃣ Sử dụng](#2%EF%B8%8F%E2%83%A3-s%E1%BB%AD-d%E1%BB%A5ng)
+- [⚙️ NÂNG CAO](#%E2%9A%99%EF%B8%8F-nang-cao)
+ - [🗃️ Pre-config](#%F0%9F%97%83%EF%B8%8F-pre-config)
+ - [⛏️ Command line arguments](#%E2%9B%8F%EF%B8%8F-command-line-arguments)
+ - [📦 Docker](#%F0%9F%93%A6-docker)
+ - [🤐 Python](#%F0%9F%A4%90-python)
+- [🤔 NOTES](#%F0%9F%A4%94-notes)
+ - [Giải thích thuật ngữ](#gi%E1%BA%A3i-thich-thu%E1%BA%ADt-ng%E1%BB%AF)
+- [👨💻 DEVELOP / CONTRIBUTE](#%F0%9F%91%A8%E2%80%8D%F0%9F%92%BB-develop--contribute)
+- [📓 TODO](#%F0%9F%93%93-todo)
+- [📝 LICENSE](#%F0%9F%93%9D-license)
+- [🤥 DISCLAIMER](#%F0%9F%A4%A5-disclaimer)
+- [😌 CREDIT](#%F0%9F%98%8C-credit)
+- [⭐ STARGAZER](#%E2%AD%90-stargazer)
+
+
---
@@ -138,16 +141,6 @@ Python CLI tool download sách từ VNULIB
| `CREATE_PDF` | `y`, `n`, ... | `y` | Tạo file PDF từ các ảnh đã tải về | `y` |
| `CLEAN_IMG` | `y`, `n`, ... | `y` | Xoá ảnh sau khi đã tạo PDF | `y` |
-> [!WARNING]
->
-> - Vì sử dụng Multithreading, nếu tải quá nhiều sách có thể ảnh hưởng đến server
-> - Thi thoảng `[browser] driver` không tự tắt dẫn đến ngốn RAM và CPU. Hãy check và tắt _(Task Manager, pkill,...)_
-
-> [!IMPORTANT]
->
-> - Nếu trong tương lai việc sử dụng link `book` hay `preview` không được, hãy thử link `page` _(vì các phần tử trang web
-> có thể thay đổi)_
-
> [!NOTE]
>
> - Ảnh và sách sẽ được tải về `./Downloads/`
@@ -161,6 +154,13 @@ Python CLI tool download sách từ VNULIB
> - `page` link: Trong link có query `&page=`:
> - `1`: Tool sẽ tự động check và tải trang sách đến khi đạt giới hạn _(Single thread)_
> - \> `1`: Tool tự nhận đấy là limit của file sách hoặc chủ đích sử dụng _(Multithreading)_
+> - Nếu trong tương lai việc sử dụng link `book` hay `preview` không được, hãy thử link `page` _(vì các phần tử trang web
+> có thể thay đổi)_
+
+> [!WARNING]
+>
+> - Vì sử dụng Multithreading, nếu tải quá nhiều sách có thể ảnh hưởng đến server
+> - Thi thoảng `[browser] driver` không tự tắt dẫn đến ngốn RAM và CPU. Hãy check và tắt _(Task Manager, pkill,...)_
---
@@ -202,8 +202,13 @@ Python CLI tool download sách từ VNULIB
```
- Ví dụ _(Windows)_:
```.ps1
- .\VNULIB-Downloader-windows.exe --link "link1" "link2" --username "1500023520000" --password "examplePass" --browser "./chrome_driver.exe" --headless --create-pdf --clean-imgs
+ .\VNULIB-Downloader-windows.exe --link "link1" "link2" --username="1500023520000" --password "examplePass\!" --browser="" --headless --create-pdf --clean-img --timeout="20"
```
+ > Đảm bảo các arguments như trên sẽ không yêu cầu nhập từ stdin
+
+> [!NOTE]
+>
+> Vui lòng để ý nếu mật khẩu chứa ký tự đặc biệt cần escape _(`\`, `\``, `^` tùy shell)_ hoặc hãy sử dụng [🗃️ Pre-config](#%F0%9F%97%83%EF%B8%8F-pre-config)
### 📦 Docker
@@ -231,7 +236,6 @@ Python CLI tool download sách từ VNULIB
git clone "https://github.com/KevinNitroG/VNULIB-Downloader" --depth 1 --filter=blob:none
```
3. Create virtual environment _(optional)_
-
- Create virtual environment
```.ps1
python -m venv .venv
@@ -245,22 +249,18 @@ Python CLI tool download sách từ VNULIB
```.sh
source .venv/bin/activate
```
- - Deactive virtual environment
- ```.sh
- deactivate
- ```
-
4. Install requirements
-
```ps1
pip install -r requirements/requirements.txt
```
-
5. Run tool
-
```ps1
python main.py
```
+6. Deactive virtual environment _(optional)_
+ ```.sh
+ deactivate
+ ```
> [!NOTE]
>
diff --git a/main.py b/main.py
index f008fee..e525b73 100644
--- a/main.py
+++ b/main.py
@@ -6,12 +6,11 @@
from multiprocessing import freeze_support
from pprint import pformat
-from urllib3 import PoolManager
from urllib3 import disable_warnings as urllib3_disable_warnings
from urllib3.exceptions import InsecureRequestWarning
from src import Action, Browser, CleanIMG, Config, CreatePDF, DownloadIMG, LinkParse, Login, PrintIntro, ToolLogger, UserOptions, create_directory, delete_old_meipass, pause, print_title
-from src.constants import DOWNLOAD_DIR, NUMBER_OF_THREADS
+from src.constants import DOWNLOAD_DIR
def main() -> None:
@@ -62,5 +61,4 @@ def main() -> None:
if __name__ == "__main__":
freeze_support() # For pyinstaller to fix multiprocessing in Windows due to freeze scheme
urllib3_disable_warnings(InsecureRequestWarning)
- PoolManager(num_pools=NUMBER_OF_THREADS)
main()
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index 040125b..0f8745b 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -5,6 +5,6 @@ img2pdf==0.5.1
print-color==0.4.6
pyyaml==6.0.1
requests==2.32.3
-selenium==4.21.0
-urllib3==2.2.1
+selenium==4.22.0
+urllib3==2.2.2
webdriver-manager==4.0.1
diff --git a/src/constants.py b/src/constants.py
index bde89ef..1382096 100644
--- a/src/constants.py
+++ b/src/constants.py
@@ -26,7 +26,7 @@ def _get_number_of_thread(max_number_of_threads: int) -> int:
return number_of_thread if number_of_thread * 5 < max_number_of_threads else max_number_of_threads
-VERSION: str = "v1.17.4"
+VERSION: str = "v1.17.5"
AUTHORS: str = "KevinNitroG & NTGNguyen"
BANNER_FILE: str = f"{BUNDLE_DIR}assets/utils/ascii_banner.txt"
with open(BANNER_FILE, encoding="utf-8") as banner_content:
diff --git a/src/modules/__init__.py b/src/modules/__init__.py
index 8ebc79e..3a5570e 100644
--- a/src/modules/__init__.py
+++ b/src/modules/__init__.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from .argpase import setup_argparse
+from .argparse import setup_argparse
from .clean_img import CleanIMG
from .config import Config
from .create_pdf import CreatePDF
diff --git a/src/modules/argpase.py b/src/modules/argparse.py
similarity index 100%
rename from src/modules/argpase.py
rename to src/modules/argparse.py
diff --git a/src/modules/user_options.py b/src/modules/user_options.py
index 6675b7b..e3e4ea4 100644
--- a/src/modules/user_options.py
+++ b/src/modules/user_options.py
@@ -12,7 +12,7 @@
from yaml import safe_load
from ..constants import CONFIG_FILE, USER_INPUT_NO, USER_INPUT_YES
-from .argpase import setup_argparse
+from .argparse import setup_argparse
logger = getLogger(__name__)
@@ -155,7 +155,7 @@ def _setup_timeout(self) -> int:
"""
if self.argparse.timeout is not None:
self._log_set_by_argparse("timeout")
- return int(self.argparse.browser)
+ return int(self.argparse.timeout)
if self._config["TIMEOUT"] is not None:
self._log_set_by_config("timeout")
return int(self._config["TIMEOUT"])
@@ -175,7 +175,7 @@ def _setup_browser(self) -> str:
self._log_set_by_config("browser")
return self._config["BROWSER"].lower()
self._log_set_by_user_input("browser")
- return input('Enter browser you are using ["CHROME", "CHROMIUM", "path/to/chrome_driver"]: ').strip().lower()
+ return input('Enter browser you are using ["chrome", "chromium", "path/to/chrome_driver"]: ').strip().lower()
def _setup_headless(self) -> bool:
"""Setup headless mode.
diff --git a/src/utils/logger.py b/src/utils/logger.py
index a3f127a..54d488f 100644
--- a/src/utils/logger.py
+++ b/src/utils/logger.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from logging import DEBUG, WARNING, Logger, getLogger
+from logging import DEBUG, ERROR, WARNING, Logger, getLogger
from logging.config import dictConfig
from logging.handlers import QueueHandler
from multiprocessing import Queue
@@ -49,7 +49,7 @@ def _setup_other_logger() -> None:
getLogger("PIL.PngImagePlugin").setLevel(WARNING)
getLogger("PIL.Image").setLevel(WARNING)
getLogger("charset_normalizer").setLevel(WARNING)
- getLogger("urllib3.connectionpool").setLevel(WARNING)
+ getLogger("urllib3.connectionpool").setLevel(ERROR)
getLogger("selenium.webdriver.remote.remote_connection").disabled = True
os_environ["WDM_LOG"] = str(DEBUG)
os_environ["WDM_SSL_VERIFY"] = "0"