Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[有问题] 使用用户名+密码登录 #356

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

AFUL1991
Copy link
Contributor

问题:python第三方包playwright及相关依赖安装不到青龙容器中,其他容器我没试过

【内容】:

昨天看到大佬对我工作的认可,我就再抛砖引玉一下。

分享一下通过用户名+密码登录的爬虫。我现在本地用这个直接获取cookie并打开存储cookie的文件复制。

具体的问题,以及相关包安装,我都写进源码了。Login_Bili.py

不过这个方式有比较严重的问题,playwright这个包以及相关依赖我装不进青龙容器,其他容器我没试过

这个方法分享给大佬,主要是想给大佬分享一个登录方式,希望大佬能把这套方法改一下,以后直接账号密码弄。

RayWangQvQ and others added 2 commits December 11, 2022 00:02
问题:python第三方包playwright及相关依赖安装不到青龙容器中,其他容器我没试过
@AFUL1991
Copy link
Contributor Author

我一般用的比较多的爬虫是playwright,这个github action中可以安装使用。但是青龙中装不了
这个好处是用起来比较简单,坏处是感觉整套包太大了,启动运行都比较慢,毕竟是完全模拟浏览器操作。
主要是可以模拟鼠标点击,这个直接能绕过绝大多数验证。

我目前想到的办法是,用playwright每天固定时间在github用爬虫获取cookie,然后用青龙拉取,但是这太笨了。如果能把playwright相关的包放进青龙,就可以在需要的时候自己运行了。

playwright相关安装:

pip install playwright  #安装playwright包
playwright install  #安装浏览器

@AFUL1991
Copy link
Contributor Author

这是登录日志,其实各种识别都是有错误的,这次是比较慢的,尝试了5次终于成功了。默认尝试8次。
微信截图_20221211003403
微信截图_20221211003446

@RayWangQvQ
Copy link
Owner

哈哈之前的扫码登录写的很棒

试了下ddddocr,识别率稍微有点低
image

还有,为啥说playwright这个包以及相关依赖装不进青龙容器呢?是有啥原因吗?

待会我来装下试试看。

@AFUL1991
Copy link
Contributor Author

分享这个源码,其实就是让大佬看看合适不合适,能用更好,不能用也没事。

不过好奇怪,我从来没有遇到过登不上的时候。我一般四次内都能登录成功,你这个七次没成功的我第一次遇到。

四个字的确实失败率高一些,我昨晚这试了5次成功的情况,是尝试次数最多的。

其实你仔细看一下这些识别结果就能看出来,两份字识别的都不一定对,但是我尝试结果来看,只要识别对了两个字,成功概率就高很多,差不多50%概率成功,所以一般四次内一定能成功。

你这种其次没成功,我第一次看到。

比如这个,我刚才试的,两次就成功了,虽然每个字都是识别错了,所以我觉得我的那个简单策略成功率还挺高,不过你七次没成功,也是神奇,哈哈哈哈哈
微信截图_20221211132505

@AFUL1991
Copy link
Contributor Author

从你这个打印信息来看,
我觉得第六次是应该成功的,
因为第一个字和第三个字都识别出来,
顺序也匹配上了,但是没成功,我也觉得挺奇怪。

理论上来说,你的这个日志的第六次是应该成功的。

我用ddddocr这个包,纯粹是因为这个包比较容易安装,相对其他ocr识别包来说,也比较小。
准确率确实稍微差一点,但是可以循环多试几次。这是之前弄另一个爬虫找的包,用习惯了,就一直在用了。

我也试过easyocr这个包,感觉识别也不行。还试过一个,我记不住名字了,那个甚至装不进容器,也就算了。

刚才又试了一次,虽然识别错了一个字,肚识别成了吐,但是也登陆成功了。这种两个字的成功率极高,但是尝试次数多了之后,就会变成四个字的,难度就会提升一些,不过我大概算了下概率(根据我看到的ddddocr识别的准确率),尝试7次成功的概率也是超过80%。
微信截图_20221211133728

@AFUL1991
Copy link
Contributor Author

微信截图_20221211135324

@RayWangQvQ
Copy link
Owner

嗯你是对的,其实验证已经过了,但是因为账号和密码错了,最后if '哔哩哔哩弹幕视频网' not in page.title()的时候永远是错的,回一直回去重试。

这一块验证可以优化下。

然后读取用户名和密码,可以从env环境变量里读

解析出cookie后,如果是青龙就存青龙环境变量里,如果是其他平台,就存bili根目录下的cookies.json里

这样,这个功能就完整了。

抽空我来看下怎么改。

@AFUL1991
Copy link
Contributor Author

我其实更想知道怎么把playwright这个包弄上,或者另外找个第三方包。我是真的搞不定。

这个循环判断,我懒得翻网页内容的变化(主要是对网页这一块真心不了解),所以就抓了title这个特征。这肯定是不合适的。

我用playwright纯粹就是为了模拟网页操作,效率低很多,但是一般来说,这种基于网页操作,网站也不会去管。

我主要是给大佬分享一个我之前弄得一些策略,要是有用更好,没用也就算了。

@RayWangQvQ
Copy link
Owner

直接pip写到extra.sh里装不进青龙里吗

@AFUL1991
Copy link
Contributor Author

我试过,装不了。报错是找不到对应版本。
无论是用这个extra还是直接进去docker安装,都没成功。
所以我就卡在这儿了。

@RayWangQvQ
Copy link
Owner

嗯发现了,包依赖要求python版本低于3.11,青龙里装的python是3.11版本的

image

@AFUL1991
Copy link
Contributor Author

搜嘎!我的也是3.11版本的python。
我说怎么有的地方能装,有的地方不能装。没注意过python版本问题。

@Gumingjie0312
Copy link

Gumingjie0312 commented Dec 21, 2022

个人觉得ocr没有必要,ocr若合并到主版本,会使项目体积增加很多。
倒不如把极验的key提取出来,再通过验证器获取token,让用户复制token到登录的终端,再执行登录操作感觉更好

@AFUL1991
Copy link
Contributor Author

个人觉得ocr没有必要,ocr若合并到主版本,会使项目体积增加很多。 倒不如把极验的key提取出来,再通过验证器获取token,让用户复制token到登录的终端,再执行登录操作感觉更好

绕不开ocr这个过程,除非你有极验的内部api,不然获取极验那个token也需要ocr

@Gumingjie0312
Copy link

个人觉得ocr没有必要,ocr若合并到主版本,会使项目体积增加很多。 倒不如把极验的key提取出来,再通过验证器获取token,让用户复制token到登录的终端,再执行登录操作感觉更好

绕不开ocr这个过程,除非你有极验的内部api,不然获取极验那个token也需要ocr

你可能没理解我意思😂,我的意思是让用户手动验证,不是用ocr

@Gumingjie0312
Copy link

个人觉得ocr没有必要,ocr若合并到主版本,会使项目体积增加很多。 倒不如把极验的key提取出来,再通过验证器获取token,让用户复制token到登录的终端,再执行登录操作感觉更好

绕不开ocr这个过程,除非你有极验的内部api,不然获取极验那个token也需要ocr

可以看看我超链接的手动验证器,用起来还不错。

@AFUL1991
Copy link
Contributor Author

个人觉得ocr没有必要,ocr若合并到主版本,会使项目体积增加很多。 倒不如把极验的key提取出来,再通过验证器获取token,让用户复制token到登录的终端,再执行登录操作感觉更好

绕不开ocr这个过程,除非你有极验的内部api,不然获取极验那个token也需要ocr

你可能没理解我意思😂,我的意思是让用户手动验证,不是用ocr

哦…我主要是想让整个过程完全自动化,不用人为干预…
不过如果可以手动点几下也能登录的话,确实比扫码方便很多…

我看过那个api,我觉得既然也需要人工点击,就不如直接通过官方页面点击验证了,然后我就把别的地方写的这个验证拉过来了

@Gumingjie0312
Copy link

Gumingjie0312 commented Dec 21, 2022 via email

@AFUL1991
Copy link
Contributor Author

直接用还不如你写的那个扫码登陆呢😂发自我的手机

如果能把这个识别过程整合到青龙,就不用再摸手机了…但是我觉得再额外调用第三方接口,如果人家接口变化,维护起来也怪麻烦的…不如直接ocr…
扫码这个我纯粹是看别人说可以用这种方式登录弄爬虫,就顺手试了试,我还是觉得所有语言人工干预的登录过程都太麻烦了…所以就把这个ocr的拿了过来…

@Gumingjie0312
Copy link

Gumingjie0312 commented Dec 21, 2022 via email

@AFUL1991
Copy link
Contributor Author

或者说可以你自己写一个网页,接受key,再callback回token,青龙每天可以推送通知链接,你再手动验证下?-------- 原始邮件 --------发件人: AFUL @.>日期: 2022年12月21日周三 10:16收件人: RayWangQvQ/BiliBiliToolPro @.>抄送: Gumingjie0312 @.>, Comment @.>主 题: Re: [RayWangQvQ/BiliBiliToolPro] [有问题] 使用用户名+密码登录 (PR #356) 直接用还不如你写的那个扫码登陆呢😂发自我的手机 如果能把这个识别过程整合到青龙,就不用再摸手机了…但是我觉得再额外调用第三方接口,如果人家接口变化,维护起来也怪麻烦的…不如直接ocr… 扫码这个我纯粹是看别人说可以用这种方式登录弄爬虫,就顺手试了试,我还是觉得所有语言人工干预的登录过程都太麻烦了…所以就把这个ocr的拿了过来… —Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.***>

我不会写网站…青龙那个通知我也不会用…😂😂😂
要是我会弄网站的话,就不会把那个二维码打印在终端了,打印的那个二维码识别成功率不高…

@Gumingjie0312
Copy link

Gumingjie0312 commented Dec 21, 2022 via email

@AFUL1991
Copy link
Contributor Author

那就让项目主来搞吧

你说的那个接口,我其实也看到过。
但是我觉得既然这个接口也绕不开那个验证,那就不如直接在网站上用这个ocr验证了。

我本地试过,这个ocr登录获取cookie的成功率挺高的,比我想象的高,虽然都是别的不好。

其实,真正比较大的包不是ocr那个包,是playwright这个包,也可以用Selenium+对应的webdriver实现,但是这一套的包也比较大。不过用这套爬虫方法,除非比较异常的登陆模式(规律性太强,或者每天登录次数过多等),后台检测不出来,这就是驱动浏览器去登录,所以也比requests那个库慢很多。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants