feat: 使用 browser-cookie3 从浏览器加载 cookies

This commit is contained in:
yzqzss 2023-07-07 00:55:13 +08:00
parent 88008537f0
commit f7efbe3472
4 changed files with 18 additions and 10 deletions

View File

@ -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}")

8
poetry.lock generated
View File

@ -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"

View File

@ -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"

View File

@ -4,3 +4,4 @@ aiofiles
httpx
requests
internetarchive
browser-cookie3