From f7efbe347291e9d14dd040c8e3a5268724cafd86 Mon Sep 17 00:00:00 2001 From: yzqzss Date: Fri, 7 Jul 2023 00:55:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=20browser-cookie3=20?= =?UTF-8?q?=E4=BB=8E=E6=B5=8F=E8=A7=88=E5=99=A8=E5=8A=A0=E8=BD=BD=20cookie?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- biliarchiver/cli_tools/bili_archive_bvids.py | 18 ++++++++++++------ poetry.lock | 8 ++++---- pyproject.toml | 1 + requirements.txt | 1 + 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/biliarchiver/cli_tools/bili_archive_bvids.py b/biliarchiver/cli_tools/bili_archive_bvids.py index 7bb23b2..acb2121 100644 --- a/biliarchiver/cli_tools/bili_archive_bvids.py +++ b/biliarchiver/cli_tools/bili_archive_bvids.py @@ -3,7 +3,7 @@ import os import argparse from pathlib import Path import time -from typing import Union +from typing import Optional, Union from internetarchive import get_item @@ -27,6 +27,7 @@ from dataclasses import dataclass class Args: bvids: str skip_ia: bool + from_browser: Optional[str] def parse_args(): @@ -34,6 +35,7 @@ def parse_args(): parser.add_argument('--bvids', dest='bvids', type=str, help='bvids 列表的文件路径', required=True) parser.add_argument('-s', '--skip-ia-check', dest='skip_ia', action='store_true', help='不检查 IA 上是否已存在对应 BVID 的 item ,直接开始下载') + parser.add_argument('--fb', '--from-browser', dest='from_browser', type=str, help='从指定浏览器导入 cookies (否则导入 config.json 中的 cookies_file) [default: None]', default=None) args = Args(**vars(parser.parse_args())) @@ -88,7 +90,12 @@ def _main(): part_concurrency=config.part_concurrency, stream_retry=config.stream_retry, ) - update_cookies_from_file(d.client, config.cookies_file) + + # load cookies + if args.from_browser is not None: + update_cookies_from_browser(d.client, args.from_browser) + else: + update_cookies_from_file(d.client, config.cookies_file) client = Client(cookies=d.client.cookies, headers=d.client.headers) logined = is_login(client) if not logined: @@ -115,12 +122,11 @@ def _main(): def update_cookies_from_browser(client: AsyncClient, browser: str): try: - a = time.time() import browser_cookie3 f = getattr(browser_cookie3, browser.lower()) - print(f"trying to load cookies from {browser}: bilibili.com, may need auth") - client.cookies.update(f(domain_name="bilibili.com")) - print(f"load complete, consumed time: {time.time() - a} s") + cookies_to_update = f(domain_name="bilibili.com") + client.cookies.update(cookies_to_update) + print(f"从 {browser} 品尝了 {len(cookies_to_update)} 块 cookies") except AttributeError: raise AttributeError(f"Invalid Browser {browser}") diff --git a/poetry.lock b/poetry.lock index 286c6f9..e993ecc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -85,14 +85,14 @@ serve = ["fastapi (>=0.92.0)", "passlib[bcrypt]", "python-jose[cryptography]", " [[package]] name = "browser-cookie3" -version = "0.19.0" +version = "0.19.1" description = "Loads cookies from your browser into a cookiejar object so can download with urllib and other libraries the same content you see in the web browser." category = "main" optional = false python-versions = "*" files = [ - {file = "browser-cookie3-0.19.0.tar.gz", hash = "sha256:0ad54fb4c857ea9056e2b33e1eaebc95f33a1287095fa7e05ee44e11f62c84bd"}, - {file = "browser_cookie3-0.19.0-py3-none-any.whl", hash = "sha256:7663ccc30cf42268bf3d60c6e8465b815eb6ed0e5bf181c2d15e25053d80815f"}, + {file = "browser-cookie3-0.19.1.tar.gz", hash = "sha256:3031ad14b96b47ef1e4c8545f2f463e10ad844ef834dcd0ebdae361e31c6119a"}, + {file = "browser_cookie3-0.19.1-py3-none-any.whl", hash = "sha256:114e40fe80853211d65f14bc690a7d90c4c287251593dc5767692a950a9006d4"}, ] [package.dependencies] @@ -974,4 +974,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "1d87816bea40eec2d592dab06c7c4e64d496213709432c032bf23c3848471810" +content-hash = "59f16db31a0dff91eeeaf50d1150b9bf88e3c3c4c69fecd23fc31a814bff4fbd" diff --git a/pyproject.toml b/pyproject.toml index 22d0e36..b987bdf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ python = "^3.9" bilix = "0.18.3" internetarchive = "^3.5.0" danmakuc = "^0.3.6" +browser-cookie3 = "^0.19.1" [tool.poetry.scripts] bili_archive_bvids = "biliarchiver.cli_tools:bili_archive_bvids.main" diff --git a/requirements.txt b/requirements.txt index 6a0aaca..e6c29dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ aiofiles httpx requests internetarchive +browser-cookie3