A-kirami / nonebot-plugin-chatgpt

MIT License
318 stars 37 forks source link

✨ 使用 playwright 绕开 cf 限制 #52

Closed sena-nana closed 1 year ago

sena-nana commented 1 year ago

这个 PR 带来了什么样的更改?

这个 PR 是否存在破坏性变更?

描述

动机和背景

其他信息

检查工作

sourcery-ai[bot] commented 1 year ago

Sourcery Code Quality Report

❌  Merging this PR will decrease code quality in the affected files by 5.20%.

Quality metrics Before After Change
Complexity 4.47 ⭐ 6.61 ⭐ 2.14 👎
Method Length 63.44 🙂 72.62 🙂 9.18 👎
Working memory 7.41 🙂 7.51 🙂 0.10 👎
Quality 70.49% 🙂 65.29% 🙂 -5.20% 👎
Other metrics Before After Change
Lines 291 355 64
Changed files Quality Before Quality After Quality Change
nonebot_plugin_chatgpt/__init__.py 74.83% 🙂 75.08% ⭐ 0.25% 👍
nonebot_plugin_chatgpt/chatgpt.py 65.91% 🙂 59.33% 🙂 -6.58% 👎

Here are some functions in these files that still need a tune-up:

File Function Complexity Length Working Memory Quality Recommendation
nonebot_plugin_chatgpt/chatgpt.py Chatbot.login 13 🙂 138 😞 10 😞 51.86% 🙂 Try splitting into smaller methods. Extract out complex expressions
nonebot_plugin_chatgpt/__init__.py ai_chat 7 ⭐ 186 😞 10 😞 52.62% 🙂 Try splitting into smaller methods. Extract out complex expressions
nonebot_plugin_chatgpt/chatgpt.py Chatbot.get_cf_cookies 11 🙂 178 😞 8 🙂 53.86% 🙂 Try splitting into smaller methods
nonebot_plugin_chatgpt/chatgpt.py Chatbot.get_chat_response 10 🙂 215 ⛔ 7 🙂 54.24% 🙂 Try splitting into smaller methods
nonebot_plugin_chatgpt/chatgpt.py Chatbot.refresh_session 9 🙂 170 😞 8 🙂 56.41% 🙂 Try splitting into smaller methods

Legend and Explanation

The emojis denote the absolute quality of the code:

The 👍 and 👎 indicate whether the quality has improved or gotten worse with this pull request.


Please see our documentation here for details on how these metrics are calculated.

We are actively working on this report - lots more documentation and extra metrics to come!

Help us improve this quality report!

sena-nana commented 1 year ago

了解,我现在在尝试解决Bearer问题,可以稍等一下再合并

A-kirami commented 1 year ago

了解,我现在在尝试解决Bearer问题,可以稍等一下再合并

这是同一个问题引发的么

sena-nana commented 1 year ago

了解,我现在在尝试解决Bearer问题,可以稍等一下再合并

这是同一个问题引发的么

似乎是,目前猜测是refresh_session没能正常获取到accessToken导致请求头里这个值为空导致的。原因可能是cf需要人工检查、playwright没能正常运行等。我打算在加入最多三次的重试来解决偶发原因导致的获取session失败,但是由于我这里一直都是顺利运行,我不确定这样是否真的有效 我会先把我的版本发给我这边的用户让他们试一试

sena-nana commented 1 year ago

目前来看是已经解决了偶发性的问题,我的几个用户都成功跑起来了,其中还包括了无GUI服务器的用户

bakashigure commented 1 year ago

目前来看是已经解决了偶发性的问题,我的几个用户都成功跑起来了,其中还包括了无GUI服务器的用户

试了一下, ubuntu20.04, 无 GUI, 遇到如下报错, 该如何判断是 遇到cf人工校验 还是其他问题导致的? image

sena-nana commented 1 year ago

目前来看是已经解决了偶发性的问题,我的几个用户都成功跑起来了,其中还包括了无GUI服务器的用户

试了一下, ubuntu20.04, 无 GUI, 遇到如下报错, 该如何判断是 遇到cf人工校验 还是其他问题导致的? image

你多试两次看看,另外是不是开了代理? 目前似乎开了代理会存在反复刷新的问题,这个还不清楚原因,似乎是ip变化导致的

benx1n commented 1 year ago

目前来看是已经解决了偶发性的问题,我的几个用户都成功跑起来了,其中还包括了无GUI服务器的用户

试了一下, ubuntu20.04, 无 GUI, 遇到如下报错, 该如何判断是 遇到cf人工校验 还是其他问题导致的? image

你多试两次看看,另外是不是开了代理? 目前似乎开了代理会存在反复刷新的问题,这个还不清楚原因,似乎是ip变化导致的

代理确实会导致无法获取cf_clearance且反复刷新,我这边也复现了

sena-nana commented 1 year ago

你多试两次看看,另外是不是开了代理? 目前似乎开了代理会存在反复刷新的问题,这个还不清楚原因,似乎是ip变化导致的

代理确实会导致无法获取cf_clearance且反复刷新,我这边也复现了

这个BUG可能超出我的能力范围了,看了好久看不出什么头绪。只能假设是playwright和httpx对于代理的处理方式不同,导致哪里被改了对不上。本来想着抓包看看但是会导致直接访问不了…… 可能需要等一个了解代理机制的大佬来解决了

bakashigure commented 1 year ago

你多试两次看看,另外是不是开了代理? 目前似乎开了代理会存在反复刷新的问题,这个还不清楚原因,似乎是ip变化导致的

代理确实会导致无法获取cf_clearance且反复刷新,我这边也复现了

这个BUG可能超出我的能力范围了,看了好久看不出什么头绪。只能假设是playwright和httpx对于代理的处理方式不同,导致哪里被改了对不上。本来想着抓包看看但是会导致直接访问不了…… 可能需要等一个了解代理机制的大佬来解决了

取消 ChatBot 的代理后能跑了, 但是不挂梯子的稳定性不知道会不会很糟糕.. 从梯子日志来看, 除了证书网站, 其他都是走的同一个节点, 不知道为啥会出现异常 image

sena-nana commented 1 year ago

你多试两次看看,另外是不是开了代理? 目前似乎开了代理会存在反复刷新的问题,这个还不清楚原因,似乎是ip变化导致的

代理确实会导致无法获取cf_clearance且反复刷新,我这边也复现了

这个BUG可能超出我的能力范围了,看了好久看不出什么头绪。只能假设是playwright和httpx对于代理的处理方式不同,导致哪里被改了对不上。本来想着抓包看看但是会导致直接访问不了…… 可能需要等一个了解代理机制的大佬来解决了

取消 ChatBot 的代理后能跑了, 但是不挂梯子的稳定性不知道会不会很糟糕.. 从梯子日志来看, 除了证书网站, 其他都是走的同一个节点, 不知道为啥会出现异常 image

其实还好,不用代理基本正常用。至于为什么会出现异常……只能先等别人解答了

A-kirami commented 1 year ago

把这段判断删掉就行,nonebot_plugin_htmlrender 加载时会自动执行 playwright 安装 https://github.com/A-kirami/nonebot-plugin-chatgpt/blob/master/nonebot_plugin_chatgpt/__init__.py#L22

hv0905 commented 1 year ago

目前我这边测试还是会跳到人工,在同网络ip下firefox打开是正常的: image

服务器输出: image

也有可能是我网络的原因,我再想办法换几个网络环境测一下看能不能解决

另:可以在session更新失败的时候对playwright窗口离屏渲染一次然后保存截图到data目录吗,现在这种情况我也很难判断是遇到了人工校验还是出了其它问题

hv0905 commented 1 year ago

(Linux服务器) 将提交给playwright的UA前半部分改为 Mozilla/5.0 (X11; Linux x86_64; rv:108.0) 解决了无法更新cf_clearance的问题

但是目前出现了循环更新cf_clearance的问题,怀疑是路由器自动走代理导致的,还在调查