📚博客主页:knighthood2001
✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下)
🎃知识星球:【认知up吧|成长|副业】介绍
❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️
🙏笔者水平有限,欢迎各位大佬指点,相互学习进步!
之前讲过一篇关于b站登录相关的博客,其中的代码是我在一个论坛中看到的,现在我选择面向过程
的角度来讲一下。
全部代码
代码其实不复杂,主要是找接口,然后发送相关请求,在请求中需要添加一些参数。
import requests
import time
from qrcode import QRCode
from PIL import Image
url = 'https://passport.bilibili.com/x/passport-login/web/qrcode/generate?source=main-fe-header'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
'Referer': 'https://www.bilibili.com/',
'Origin': 'https://www.bilibili.com'
}
response = requests.get(url=url, headers=headers).json()
print(response)
qrcode_key = response['data']['qrcode_key']
print(qrcode_key)
# 创建二维码对象
qr = QRCode()
# 设置二维码的数据
qr.add_data(response['data']['url'])
# 生成二维码图片
img = qr.make_image()
img = img.resize((200, 200), resample=Image.BICUBIC)
# 展示图片
img.show()
check_login_url = f'https://passport.bilibili.com/x/passport-login/web/qrcode/poll?qrcode_key={qrcode_key}&source=main-fe-header'
# 创建一个Session对象
session = requests.Session()
while 1:
data = session.get(url=check_login_url, headers=headers).json()
print(data)
if data['data']['code'] == 0:
# 使用Session发起请求
response = session.get('https://www.bilibili.com/', headers=headers)
# Session会自动处理cookies
print(session.cookies.get_dict())
# 保存cookies
with open('cookies.txt', 'w') as f:
f.write(str(session.cookies.get_dict()))
break
time.sleep(1)
讲解
我在之前文章,讲过了相关的接口,图片你们可以去看一下。
使用requests去访问的时候,必须加上headers,否则就会失败。
response = requests.get(url=url, headers=headers).json()
print(response)
通过get请求https://passport.bilibili.com/x/passport-login/web/qrcode/generate?source=main-fe-header
网址,你会获得一个类似字典样式的内容
通过下面代码,你就能获取到一个关键参数,也就是登录二维码的key
qrcode_key = response['data']['qrcode_key']
print(qrcode_key)
# 创建二维码对象
qr = QRCode()
# 设置二维码的数据
qr.add_data(response['data']['url'])
# 生成二维码图片
img = qr.make_image()
img = img.resize((200, 200), resample=Image.BICUBIC)
# 展示图片
img.show()
这里就是将网址写入二维码中,并显示出来,方便你扫码。
上面的qrcode_key可以用来构建下面的网址,该网址可以用来判断是否登录上。
check_login_url = f'https://passport.bilibili.com/x/passport-login/web/qrcode/poll?qrcode_key={qrcode_key}&source=main-fe-header'
# 创建一个Session对象
session = requests.Session()
while 1:
data = session.get(url=check_login_url, headers=headers).json()
print(data)
if data['data']['code'] == 0:
# 使用Session发起请求
response = session.get('https://www.bilibili.com/', headers=headers)
# Session会自动处理cookies
print(session.cookies.get_dict())
# 保存cookies
with open('cookies.txt', 'w') as f:
f.write(str(session.cookies.get_dict()))
break
time.sleep(1)
接着我们采用死循环,每隔一秒去检查一下,你那个二维码是否扫码了,如果扫码了,就会保存其中的cookie到本地。
小结
最后保存的cookie,目前是字典形式的字符串,后续可以又大用。