refactor(browser.py): 优化从浏览器读取 Cookie 功能

This commit is contained in:
JoeanAmier 2024-09-08 21:10:06 +08:00
parent 10164ba7b6
commit ab405f605c
8 changed files with 65 additions and 27 deletions

View File

@ -1,6 +1,6 @@
FROM python:3.12.4-slim
LABEL name="XHS-Downloader" version="2.2" authors="JoeanAmier"
LABEL name="XHS-Downloader" authors="JoeanAmier" repository="https://github.com/JoeanAmier/XHS-Downloader"
COPY locale /locale
COPY source /source

Binary file not shown.

View File

@ -217,8 +217,8 @@ msgstr "New version detected: {0}.{1}"
msgid "作品 {0} 存在下载记录,跳过下载"
msgstr "works {0} has a download record, skip download"
msgid "从指定的浏览器读取小红书网页版 Cookie支持1 Arc, 2 Brave, 3 Chrome, 4 Chromium, 5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi; 输入浏览器名称或序号"
msgstr "To read the Xiaohongshu web version cookie from the specified browser, the corresponding browser needs to be closed. Supports: 1 Arc, 2 Brave, 3 Chrome, 4 Chromium, 5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi, enter the browser name or serial number"
msgid "从指定的浏览器读取小红书网页版 Cookie支持{0}; 输入浏览器名称或序号"
msgstr "Read Xiaohongshu web cookies from the specified browser, supporting: {0}; Enter browser name or serial number"
msgid "查看 XHS-Downloader 版本"
msgstr "View XHS Downloader Version"

View File

@ -217,7 +217,7 @@ msgstr ""
msgid "作品 {0} 存在下载记录,跳过下载"
msgstr ""
msgid "从指定的浏览器读取小红书网页版 Cookie支持1 Arc, 2 Brave, 3 Chrome, 4 Chromium, 5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi; 输入浏览器名称或序号"
msgid "从指定的浏览器读取小红书网页版 Cookie支持{0}; 输入浏览器名称或序号"
msgstr ""
msgid "查看 XHS-Downloader 版本"

View File

@ -138,8 +138,12 @@ class CLI:
("--language", "-l", "choice", _("设置程序语言目前支持zh_CN、en_GB")),
("--settings", "-s", "str", _("读取指定配置文件")),
("--browser_cookie", "-bc", "choice",
fill(_("从指定的浏览器读取小红书网页版 Cookie支持1 Arc, 2 Brave, 3 Chrome, 4 Chromium, "
"5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi; 输入浏览器名称或序号"), width=40)),
fill(_("从指定的浏览器读取小红书网页版 Cookie支持{0}; 输入浏览器名称或序号").format(
", ".join(f"{i}: {j}" for i, j in enumerate(
BrowserCookie.SUPPORT_BROWSER.keys(),
start=1,
))
), width=40)),
("--update_settings", "-us", "flag", _("是否更新配置文件")),
("--help", "-h", "flag", _("查看详细参数说明")),
("--version", "-v", "flag", _("查看 XHS-Downloader 版本")),

View File

@ -372,7 +372,9 @@ class XHS:
@staticmethod
def read_browser_cookie(value: str | int) -> str:
return BrowserCookie.get(
value, domains=["xiaohongshu.com", ]) if value else ""
value,
domains=["xiaohongshu.com", ],
) if value else ""
# @staticmethod
# async def index(request):

View File

@ -1,5 +1,7 @@
from contextlib import suppress
from sys import platform
from rich.console import Console
from rookiepy import (
arc,
brave,
@ -9,8 +11,7 @@ from rookiepy import (
firefox,
librewolf,
opera,
# opera_gx,
# safari,
opera_gx,
vivaldi,
)
@ -19,29 +20,38 @@ __all__ = ["BrowserCookie"]
class BrowserCookie:
SUPPORT_BROWSER = {
"arc": arc,
"chrome": chrome,
"chromium": chromium,
"opera": opera,
# "opera_gx": opera_gx,
"brave": brave,
"edge": edge,
"vivaldi": vivaldi,
"firefox": firefox,
"librewolf": librewolf,
# "safari": safari,
"Arc": (arc, "Linux, macOS, Windows"),
"Chrome": (chrome, "Linux, macOS, Windows"),
"Chromium": (chromium, "Linux, macOS, Windows"),
"Opera": (opera, "Linux, macOS, Windows"),
"OperaGX": (opera_gx, "macOS, Windows"),
"Brave": (brave, "Linux, macOS, Windows"),
"Edge": (edge, "Linux, macOS, Windows"),
"Vivaldi": (vivaldi, "Linux, macOS, Windows"),
"Firefox": (firefox, "Linux, macOS, Windows"),
"LibreWolf": (librewolf, "Linux, macOS, Windows"),
}
@classmethod
def get(cls, browser: str | int, domains: list[str]) -> str:
def run(cls, domains: list[str], console: Console = None, ) -> str:
console = console or Console()
options = "\n".join(f"{i}. {k}: {v[1]}" for i, (k, v) in enumerate(cls.SUPPORT_BROWSER.items(), start=1))
if browser := console.input(
f"读取指定浏览器的 Cookie 并写入配置文件\n{options}\n请输入浏览器名称或序号:", ):
return cls.get(browser, domains, console, )
console.print("未选择浏览器!")
@classmethod
def get(cls, browser: str | int, domains: list[str], console: Console = None, ) -> str:
console = console or Console()
if not (browser := cls.__browser_object(browser)):
print("浏览器名称或序号输入错误!")
console.print("浏览器名称或序号输入错误!")
return ""
try:
cookies = browser(domains=domains)
return "; ".join(f"{i["name"]}={i["value"]}" for i in cookies)
except RuntimeError:
print("获取 Cookie 失败,未找到 Cookie 数据!")
console.print("获取 Cookie 失败,未找到 Cookie 数据!")
return ""
@classmethod
@ -50,12 +60,33 @@ class BrowserCookie:
browser = int(browser) - 1
if isinstance(browser, int):
try:
return list(cls.SUPPORT_BROWSER.values())[browser - 1]
return list(cls.SUPPORT_BROWSER.values())[browser][0]
except IndexError:
return None
if isinstance(browser, str):
try:
return cls.SUPPORT_BROWSER[browser.lower()]
return cls.__match_browser(browser)
except KeyError:
return None
raise TypeError
@classmethod
def __match_browser(cls, browser: str):
for i, j in cls.SUPPORT_BROWSER.items():
if i.lower() == browser.lower():
return j[0]
match platform:
case "darwin":
from rookiepy import safari
BrowserCookie.SUPPORT_BROWSER |= {
"Safari": (safari, "macOS"),
}
case "linux":
BrowserCookie.SUPPORT_BROWSER.pop("OperaGX")
case "win32":
pass
case _:
print("从浏览器读取 Cookie 功能不支持当前平台!")

View File

@ -1,7 +1,8 @@
**项目更新内容:**
1. 优化文件后缀处理逻辑
2. 优化代理测试逻辑
1. 优化从浏览器读取 Cookie 功能
2. 优化文件后缀处理逻辑
3. 优化代理测试逻辑
<p><strong>旧版本升级后首次运行请删除配置文件 <code>settings.json</code>,删除后重新运行程序会自动生成新的默认配置文件!</strong></p>