Johnserf-Seed / TikTokDownload

抖音去水印批量下载用户主页作品、喜欢、收藏、图文、音频
https://github.com/Johnserf-Seed/f2
MIT License
6.53k stars 1.26k forks source link

下载Tiktok 报错 AttributeError: 'dict' object has no attribute 'get_video_info' #668

Open WWRichard opened 7 months ago

WWRichard commented 7 months ago

描述出现的错误 ╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ │ in _run_module_as_main:198 │ │ in _run_code:88 │ │ │ │ in :7 │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\core.py:1157 in call │ │ │ │ 1154 │ │ │ 1155 │ def call(self, *args: t.Any, kwargs: t.Any) -> t.Any: │ │ 1156 │ │ """Alias for :meth:main.""" │ │ ❱ 1157 │ │ return self.main(*args, kwargs) │ │ 1158 │ │ 1159 │ │ 1160 class Command(BaseCommand): │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\core.py:1078 in main │ │ │ │ 1075 │ │ try: │ │ 1076 │ │ │ try: │ │ 1077 │ │ │ │ with self.make_context(prog_name, args, extra) as ctx: │ │ ❱ 1078 │ │ │ │ │ rv = self.invoke(ctx) │ │ 1079 │ │ │ │ │ if not standalone_mode: │ │ 1080 │ │ │ │ │ │ return rv │ │ 1081 │ │ │ │ │ # it's not safe to ctx.exit(rv) here! │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\core.py:1688 in invoke │ │ │ │ 1685 │ │ │ │ super().invoke(ctx) │ │ 1686 │ │ │ │ sub_ctx = cmd.make_context(cmd_name, args, parent=ctx) │ │ 1687 │ │ │ │ with sub_ctx: │ │ ❱ 1688 │ │ │ │ │ return _process_result(sub_ctx.command.invoke(sub_ctx)) │ │ 1689 │ │ │ │ 1690 │ │ # In chain mode we create the contexts step by step, but after the │ │ 1691 │ │ # base command has been invoked. Because at that point we do not │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\core.py:1434 in invoke │ │ │ │ 1431 │ │ │ echo(style(message, fg="red"), err=True) │ │ 1432 │ │ │ │ 1433 │ │ if self.callback is not None: │ │ ❱ 1434 │ │ │ return ctx.invoke(self.callback, *ctx.params) │ │ 1435 │ │ │ 1436 │ def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]: │ │ 1437 │ │ """Return a list of completions for the incomplete value. Looks │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\core.py:783 in invoke │ │ │ │ 780 │ │ │ │ 781 │ │ with augment_usage_errors(self): │ │ 782 │ │ │ with ctx: │ │ ❱ 783 │ │ │ │ return callback(args, kwargs) │ │ 784 │ │ │ 785 │ def forward( │ │ 786 │ │ self, cmd: "Command", *args: t.Any, kwargs: t.Any # noqa: B902 │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\decorators.py:33 in new_func │ │ │ │ 30 │ """ │ │ 31 │ │ │ 32 │ def new_func(*args: "P.args", *kwargs: "P.kwargs") -> "R": │ │ ❱ 33 │ │ return f(get_current_context(), args, kwargs) │ │ 34 │ │ │ 35 │ return update_wrapper(new_func, f) │ │ 36 │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\f2\apps\tiktok\cli.py:469 in tiktok │ │ │ │ 466 │ │ │ 467 │ # 添加app_name到kwargs │ │ 468 │ kwargs["app_name"] = "tiktok" │ │ ❱ 469 │ ctx.invoke(set_cli_config, kwargs) │ │ 470 │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\core.py:783 in invoke │ │ │ │ 780 │ │ │ │ 781 │ │ with augment_usage_errors(self): │ │ 782 │ │ │ with ctx: │ │ ❱ 783 │ │ │ │ return callback(*args, *kwargs) │ │ 784 │ │ │ 785 │ def forward( │ │ 786 │ │ self, cmd: "Command", args: t.Any, kwargs: t.Any # noqa: B902 │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\click\decorators.py:33 in new_func │ │ │ │ 30 │ """ │ │ 31 │ │ │ 32 │ def new_func(*args: "P.args", *kwargs: "P.kwargs") -> "R": │ │ ❱ 33 │ │ return f(get_current_context(), args, **kwargs) │ │ 34 │ │ │ 35 │ return update_wrapper(new_func, f) │ │ 36 │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\f2\cli\cli_commands.py:135 in set_cli_config │ │ │ │ 132 │ │ │ 133 │ with RichConsoleManager().progress: │ │ 134 │ │ try: │ │ ❱ 135 │ │ │ asyncio.run(run_app(kwargs)) │ │ 136 │ │ except APIError as e: │ │ 137 │ │ │ logger.error(e.display_error()) │ │ 138 │ │ │ │ C:\Users\Wang\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py:194 in run │ │ │ │ 191 │ │ │ "asyncio.run() cannot be called from a running event loop") │ │ 192 │ │ │ 193 │ with Runner(debug=debug, loop_factory=loop_factory) as runner: │ │ ❱ 194 │ │ return runner.run(main) │ │ 195 │ │ 196 │ │ 197 def _cancel_all_tasks(loop): │ │ │ │ C:\Users\Wang\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py:118 in run │ │ │ │ 115 │ │ │ │ 116 │ │ self._interrupt_count = 0 │ │ 117 │ │ try: │ │ ❱ 118 │ │ │ return self._loop.run_until_complete(task) │ │ 119 │ │ except exceptions.CancelledError: │ │ 120 │ │ │ if self._interrupt_count > 0: │ │ 121 │ │ │ │ uncancel = getattr(task, "uncancel", None) │ │ │ │ C:\Users\Wang\AppData\Local\Programs\Python\Python312\Lib\asyncio\base_events.py:685 in │ │ run_until_complete │ │ │ │ 682 │ │ if not future.done(): │ │ 683 │ │ │ raise RuntimeError('Event loop stopped before Future completed.') │ │ 684 │ │ │ │ ❱ 685 │ │ return future.result() │ │ 686 │ │ │ 687 │ def stop(self): │ │ 688 │ │ """Stop running the event loop. │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\f2\cli\cli_commands.py:143 in run_app │ │ │ │ 140 async def run_app(kwargs): │ │ 141 │ app_name = kwargs["app_name"] │ │ 142 │ app_module = importlib.import_module(f"f2.apps.{app_name}.handler") │ │ ❱ 143 │ await app_module.main(kwargs) │ │ 144 │ │ 145 │ │ 146 if name == "main": │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\f2\apps\tiktok\handler.py:665 in main │ │ │ │ 662 async def main(kwargs): │ │ 663 │ mode = kwargs.get("mode") │ │ 664 │ if mode in mode_function_map: │ │ ❱ 665 │ │ await mode_functionmapmode │ │ 666 │ else: │ │ 667 │ │ logger.error(("不存在该模式: {0}").format(mode)) │ │ 668 │ │ richconsole.print(("不存在该模式: {0}").format(mode)) │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\f2\apps\tiktok\handler.py:234 in handler_one_video │ │ │ │ 231 │ │ │ ) │ │ 232 │ │ │ │ 233 │ │ async with AsyncVideoDB("tiktok_videos.db") as vdb: │ │ ❱ 234 │ │ │ await self.get_or_add_video_data(awemedata, vdb) │ │ 235 │ │ │ │ 236 │ │ logger.debug(("单个视频数据: {0}".format(aweme_data))) │ │ 237 │ │ │ │ D:\Code\PY\Tiktok\venv\Lib\site-packages\f2\apps\tiktok\handler.py:137 in get_or_add_video_data │ │ │ │ 134 │ │ """ │ │ 135 │ │ │ │ 136 │ │ # 尝试从数据库中获取作品数据 │ │ ❱ 137 │ │ local_video_data = await db.get_video_info(aweme_data.get("aweme_id", None)) │ │ 138 │ │ │ │ 139 │ │ # 如果作品不在数据库中,将其添加到数据库 │ │ 140 │ │ if not local_video_data: │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ bug复现 DEBUG 主配置参数:{'cookie': None, 'max_connections': 5, 'max_counts': 0, 'max_retries': 5, 'maxtasks': 5, 'naming': '{create}{desc}', 'page_counts': 5, 'path': 'Download', 'timeout': 10, 'proxies': {'http': None, 'https': None}} DEBUG 自定义配置参数:{'cookie': 'ak_bmsc=C80A038595DF604050E84E 'timeout': None, 'url': 'https://vt.tiktok.com/ZSFS8bXhS/'} DEBUG CLI参数:{'cookie': 'ak_bmsc=C8 app_theme=light'} DEBUG 开始爬取视频: 7328332762635603207 DEBUG 作品详情接口地址:https://www.tikt DEBUG 响应状态码: 200 DEBUG 视频ID: None 视频文案: None 作者: None DEBUG 用户信息接口地址:https://www.tiktoCM9WX7rr DEBUG 响应状态码: 200 截图 如果适用,添加屏幕截图以帮助解释您的问题。 ![Uploading 02-29_16-20-28.jpg…]()

桌面(请填写以下信息): -操作系统:windows11 64bit -vpn代理:开启 -项目版本:0.0.1.4 -py版本:3.12.2 -依赖库的版本:[出错的库版本号]

附文 在此处添加有关此问题的其他备注。

Johnserf-Seed commented 7 months ago

https://github.com/Johnserf-Seed/f2/issues/45

WWRichard commented 7 months ago

Johnserf-Seed/f2#45

非常感谢大佬的快速回复,我按提示修改了代码,现在变成了一直是403,内容长度为0。 按您在那个问题的回复是节点或者VPN软件的问题。可是我这里浏览器是可以正常打开视频的,我试了我的几十个节点,多家机场,都是403,内容为0。

     45048DD1B616BBAFA10FAF57&ply_type=2&policy=2&signature=4d6adcc0df95a64a701a5b0f9360177e&tk=tt_chain_token在服务         总内容长度为:0 字节

WARNING 内容长度为0,跳过下载 💛 [ 丢失 ]:2024-01-26 17-13-59_...#MASHLEvideo.mp4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0% • 0/? bytes ? ETA

(venv) D:\Code\PY\Tiktok>

02-29_17-45-54

Johnserf-Seed commented 7 months ago

Johnserf-Seed/f2#45

非常感谢大佬的快速回复,我按提示修改了代码,现在变成了一直是403,内容长度为0。 按您在那个问题的回复是节点或者VPN软件的问题。可是我这里浏览器是可以正常打开视频的,我试了我的几十个节点,多家机场,都是403,内容为0。

     45048DD1B616BBAFA10FAF57&ply_type=2&policy=2&signature=4d6adcc0df95a64a701a5b0f9360177e&tk=tt_chain_token在服务         总内容长度为:0 字节

WARNING 内容长度为0,跳过下载 💛 [ 丢失 ]:2024-01-26 17-13-59_...#MASHLEvideo.mp4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0% • 0/? bytes ? ETA

(venv) D:\Code\PY\Tiktok>

02-29_17-45-54

这个情况是因人而异的,但是访问403就是网络方面的情况,这个比较复杂可能和证书,cookie,风控等等都有关系,需要自己慢慢排查了。

WWRichard commented 7 months ago

Johnserf-Seed/f2#45

非常感谢大佬的快速回复,我按提示修改了代码,现在变成了一直是403,内容长度为0。 按您在那个问题的回复是节点或者VPN软件的问题。可是我这里浏览器是可以正常打开视频的,我试了我的几十个节点,多家机场,都是403,内容为0。

     45048DD1B616BBAFA10FAF57&ply_type=2&policy=2&signature=4d6adcc0df95a64a701a5b0f9360177e&tk=tt_chain_token在服务         总内容长度为:0 字节

WARNING 内容长度为0,跳过下载 💛 [ 丢失 ]:2024-01-26 17-13-59_...#MASHLEvideo.mp4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0% • 0/? bytes ? ETA (venv) D:\Code\PY\Tiktok> 02-29_17-45-54

这个情况是因人而异的,但是访问403就是网络方面的情况,这个比较复杂可能和证书,cookie,风控等等都有关系,需要自己慢慢排查了。

感谢大佬回复,你这个效率真是让人感动。从早期版本就在用了,真心感谢大佬的付出。我再研究研究