mirror of
https://github.com/JoeanAmier/XHS-Downloader.git
synced 2025-12-26 04:48:05 +08:00
refactor(browser.py): 优化从浏览器读取 Cookie 功能
This commit is contained in:
parent
10164ba7b6
commit
ab405f605c
@ -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.
@ -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"
|
||||
|
||||
@ -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 版本"
|
||||
|
||||
@ -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 版本")),
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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 功能不支持当前平台!")
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
**项目更新内容:**
|
||||
|
||||
1. 优化文件后缀处理逻辑
|
||||
2. 优化代理测试逻辑
|
||||
1. 优化从浏览器读取 Cookie 功能
|
||||
2. 优化文件后缀处理逻辑
|
||||
3. 优化代理测试逻辑
|
||||
|
||||
<p><strong>旧版本升级后首次运行请删除配置文件 <code>settings.json</code>,删除后重新运行程序会自动生成新的默认配置文件!</strong></p>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user