前言
本程序是get_bili_medal_list项目
的一个子程序,用于大批量获取用户数据时的cookie替换。
使用
项目根目录运行python login_get_cookie.py
,根据提示完成短信验证登录。
期间需要访问http://geetest.colter.top/,传入gt
和challenge
完成手动的极验校验,获取validate
和seccode
。
最后需要填入手机验证码完成登录即可。
ps:python login_get_cookie.py 1
,优化了validate
和seccode
的输入,请自行选择执行。
源码
login_get_cookie.py
依赖的第三方库,自行补装一下
import json
import asyncio
import aiohttp
import sys, re
from itertools import islice
header1 = {
'content-type': 'application/x-www-form-urlencoded',
"referer": "https://space.bilibili.com",
"Origin": "https://space.bilibili.com",
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.186.400 '
}
proxys = None
# 国家id转对应的cid
async def get_cid(country_id):
with open("data/country.json", "r", encoding="utf8") as f:
country_data = json.load(f)
for common in country_data["data"]["common"]:
if common["country_id"] == country_id:
return common["id"]
return 1
# 获取验证码相关信息
async def get_check():
API_URL = 'https://passport.bilibili.com/x/passport-login/captcha?source=main_web'
async with aiohttp.ClientSession(headers=header1) as session:
try:
async with session.get(url=API_URL, headers=header1, proxy=proxys) as response:
if response.status != 200:
response.raise_for_status()
ret = await response.json()
except aiohttp.ClientError as e:
print(e)
return {"code": -1}
return ret
# 获取captcha_key喵
async def get_captcha_key(post_data):
API_URL = 'https://passport.bilibili.com/x/passport-login/web/sms/send'
async with aiohttp.ClientSession(headers=header1) as session:
try:
async with session.post(url=API_URL, headers=header1, proxy=proxys, data=post_data) as response:
if response.status != 200:
response.raise_for_status()
ret = await response.json()
except aiohttp.ClientError as e:
print(e)
return {"code": -400}
return ret
# 登录
async def login(post_data):
API_URL = 'https://passport.bilibili.com/x/passport-login/web/login/sms'
async with aiohttp.ClientSession(headers=header1) as session:
try:
async with session.post(url=API_URL, headers=header1, proxy=proxys, data=post_data) as response:
if response.status != 200:
response.raise_for_status()
print("\n返回的cookie如下")
print(response.cookies)
ret = await response.json()
except aiohttp.ClientError as e:
print(e)
return {"code": -400}
return ret
async def main():
banner = r"""
\\ //
\\ //
##################### ________ ___ ___ ___ ________ ___ ___ ___
## ## |\ __ \ |\ \ |\ \ |\ \ |\ __ \ |\ \ |\ \ |\ \
## // \\ ## \ \ \|\ /_\ \ \\ \ \ \ \ \\ \ \|\ /_\ \ \\ \ \ \ \ \
## // \\ ## \ \ __ \\ \ \\ \ \ \ \ \\ \ __ \\ \ \\ \ \ \ \ \
## ## \ \ \|\ \\ \ \\ \ \____ \ \ \\ \ \|\ \\ \ \\ \ \____ \ \ \
## www ## \ \_______\\ \__\\ \_______\\ \__\\ \_______\\ \__\\ \_______\\ \__\
## ## \|_______| \|__| \|_______| \|__| \|_______| \|__| \|_______| \|__|
#####################
\/ \/ 哔哩哔哩 (゜-゜)つロ 干杯~
"""
# 获取captcha_key的传参
post_data1 = {
"cid": "86",
"tel" : "0",
"source" : "main-fe-header",
"token" : "",
"challenge" : "",
"validate" : "",
"seccode" : ""
}
# 登录传参
post_data2 = {
"cid": "86",
"tel" : "0",
"code" : 0,
"source" : "main-fe-header",
"captcha_key" : ""
}
print(banner + "\n")
# 获取命令行传入的参数
args = sys.argv
# 输出命令行传入的参数
# print(args)
country_id = input("请输入手机的国家代码(不填默认 86):")
tel = input("请输入手机号码:")
if country_id == "":
# post_data1["cid"] = 1
country_id = "86"
# 获取下cid
# post_data1["cid"] = await get_cid(country_id)
post_data1["cid"] = country_id
if tel == "":
print("输入手机号啊!kora!")
return
else:
post_data1["tel"] = tel
print("[开始获取验证信息]")
token_json = await get_check()
print(json.dumps(token_json, indent=2, ensure_ascii=False))
if token_json["code"] != 0:
print("获取校验信息失败,取名为寄喵~")
return
try:
post_data1["token"] = token_json["data"]["token"]
gt = post_data1["challenge"] = token_json["data"]["geetest"]["gt"]
post_data1["challenge"] = token_json["data"]["geetest"]["challenge"]
print("\n请访问:http://geetest.colter.top/ 继续验证码的校验,获取validate和seccode")
print("gt=\n" + gt)
print("challenge=\n" + post_data1["challenge"])
print("\n")
# 传参 不传参则是普通模式;传入1个参数 任何内容,则定制优化模式
if len(args) >= 2:
validate_seccode = input("请输入快捷复制的validate&seccode:")
match = re.search('validate=(.*)&seccode=(.*)', validate_seccode)
validate = match.group(1)
seccode = match.group(2)
else:
validate = input("请输入验证后的validate:")
seccode = input("请输入验证后的seccode:")
if validate == "" or seccode == "":
print("空值是达咩的啦~如果验证失败,可以重新运行重试~")
return
post_data1["validate"] = validate
post_data1["seccode"] = seccode
print(json.dumps(post_data1, indent=2, ensure_ascii=False))
print("[传参内容集齐啦!开冲!]\n")
captcha_key_json = await get_captcha_key(post_data1)
try:
if captcha_key_json["code"] != 0:
print("失败了喵~,请求返回如下")
print(json.dumps(captcha_key_json, indent=2, ensure_ascii=False))
return
print("短信验证码发送成功!")
print(json.dumps(captcha_key_json, indent=2, ensure_ascii=False))
print("\n请在5分钟内完成验证哦~")
code = input("请输入手机收到的验证码:")
if code == "":
print("空验证码???")
return
else:
post_data2["code"] = code
post_data2["cid"] = post_data1["cid"]
post_data2["tel"] = post_data1["tel"]
post_data2["captcha_key"] = captcha_key_json["data"]["captcha_key"]
login_json = await login(post_data2)
try:
if login_json["code"] != 0:
print("\n登录失败喵~请求返回如下")
print(json.dumps(login_json, indent=2, ensure_ascii=False))
return
# print(json.dumps(login_json, indent=2, ensure_ascii=False))
print("\n登录成功!!!")
if login_json["data"]["is_new"] == True:
print("新注册用户")
except Exception as e:
print(e)
return
except Exception as e:
print(e)
return
except Exception as e:
print(e)
return
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
data/country.json
{"code":0,"data":{"common":[{"id":1,"cname":"中国大陆","country_id":"86"},{"id":5,"cname":"中国香港特别行政区","country_id":"852"},{"id":2,"cname":"中国澳门特别行政区","country_id":"853"},{"id":3,"cname":"中国台湾","country_id":"886"},{"id":4,"cname":"美国","country_id":"1"},{"id":6,"cname":"比利时","country_id":"32"},{"id":7,"cname":"澳大利亚","country_id":"61"},{"id":8,"cname":"法国","country_id":"33"},{"id":9,"cname":"加拿大","country_id":"1"},{"id":10,"cname":"日本","country_id":"81"},{"id":11,"cname":"新加坡","country_id":"65"},{"id":12,"cname":"韩国","country_id":"82"},{"id":13,"cname":"马来西亚","country_id":"60"},{"id":14,"cname":"英国","country_id":"44"},{"id":15,"cname":"意大利","country_id":"39"},{"id":16,"cname":"德国","country_id":"49"},{"id":18,"cname":"俄罗斯","country_id":"7"},{"id":19,"cname":"新西兰","country_id":"64"}],"others":[{"id":22,"cname":"阿富汗","country_id":"93"},{"id":20,"cname":"阿尔巴尼亚","country_id":"355"},{"id":21,"cname":"阿尔及利亚","country_id":"213"},{"id":31,"cname":"安道尔","country_id":"376"},{"id":32,"cname":"安哥拉","country_id":"244"},{"id":33,"cname":"安提瓜岛和巴布达","country_id":"1268"},{"id":23,"cname":"阿根廷","country_id":"54"},{"id":204,"cname":"亚美尼亚","country_id":"374"},{"id":183,"cname":"阿森松岛","country_id":"247"},{"id":34,"cname":"奥地利","country_id":"43"},{"id":26,"cname":"阿塞拜疆","country_id":"994"},{"id":37,"cname":"巴哈马群岛","country_id":"1242"},{"id":40,"cname":"巴林","country_id":"973"},{"id":131,"cname":"孟加拉国","country_id":"880"},{"id":35,"cname":"巴巴多斯","country_id":"1246"},{"id":43,"cname":"白俄罗斯","country_id":"375"},{"id":52,"cname":"伯利兹","country_id":"501"},{"id":46,"cname":"贝宁","country_id":"229"},{"id":44,"cname":"百慕大群岛","country_id":"1441"},{"id":54,"cname":"不丹","country_id":"975"},{"id":51,"cname":"玻利维亚","country_id":"591"},{"id":49,"cname":"波黑","country_id":"387"},{"id":53,"cname":"博茨瓦纳","country_id":"267"},{"id":42,"cname":"巴西","country_id":"55"},{"id":193,"cname":"文莱","country_id":"673"},{"id":45,"cname":"保加利亚","country_id":"359"},{"id":55,"cname":"布基纳法索","country_id":"226"},{"id":56,"cname":"布隆迪","country_id":"257"},{"id":96,"cname":"柬埔寨","country_id":"855"},{"id":100,"cname":"喀麦隆","country_id":"237"},{"id":72,"cname":"佛得角","country_id":"238"},{"id":102,"cname":"开曼群岛","country_id":"1345"},{"id":68,"cname":"非洲中部","country_id":"236"},{"id":214,"cname":"乍得","country_id":"235"},{"id":216,"cname":"智利","country_id":"56"},{"id":77,"cname":"哥伦比亚","country_id":"57"},{"id":103,"cname":"科摩罗","country_id":"269"},{"id":75,"cname":"刚果","country_id":"242"},{"id":76,"cname":"刚果(金)","country_id":"243"},{"id":107,"cname":"库克岛","country_id":"682"},{"id":78,"cname":"哥斯达黎加","country_id":"506"},{"id":105,"cname":"克罗地亚","country_id":"385"},{"id":81,"cname":"古巴","country_id":"53"},{"id":162,"cname":"塞浦路斯","country_id":"357"},{"id":97,"cname":"捷克","country_id":"420"},{"id":58,"cname":"丹麦","country_id":"45"},{"id":59,"cname":"迪戈加西亚岛","country_id":"246"},{"id":90,"cname":"吉布提","country_id":"253"},{"id":61,"cname":"多米尼加","country_id":"1767"},{"id":62,"cname":"多米尼加代表","country_id":"1809"},{"id":63,"cname":"厄瓜多尔","country_id":"593"},{"id":27,"cname":"埃及","country_id":"20"},{"id":157,"cname":"萨尔瓦多","country_id":"503"},{"id":57,"cname":"赤道几内亚","country_id":"240"},{"id":64,"cname":"厄立特里亚","country_id":"291"},{"id":30,"cname":"爱沙尼亚","country_id":"372"},{"id":28,"cname":"埃塞俄比亚","country_id":"251"},{"id":73,"cname":"福克兰岛","country_id":"500"},{"id":65,"cname":"法罗岛","country_id":"298"},{"id":70,"cname":"斐济","country_id":"679"},{"id":71,"cname":"芬兰","country_id":"358"},{"id":67,"cname":"法属圭亚那","country_id":"594"},{"id":66,"cname":"法属波利尼西亚","country_id":"689"},{"id":95,"cname":"加蓬","country_id":"241"},{"id":74,"cname":"冈比亚","country_id":"220"},{"id":154,"cname":"格鲁吉亚","country_id":"995"},{"id":94,"cname":"加纳","country_id":"233"},{"id":215,"cname":"直布罗陀","country_id":"350"},{"id":199,"cname":"希腊","country_id":"30"},{"id":80,"cname":"格陵兰岛","country_id":"299"},{"id":79,"cname":"格林纳达","country_id":"1473"},{"id":82,"cname":"瓜德罗普岛","country_id":"590"},{"id":83,"cname":"关岛","country_id":"1671"},{"id":92,"cname":"几内亚","country_id":"224"},{"id":93,"cname":"几内亚比绍","country_id":"245"},{"id":84,"cname":"海地","country_id":"509"},{"id":87,"cname":"洪都拉斯","country_id":"504"},{"id":201,"cname":"匈牙利","country_id":"36"},{"id":47,"cname":"冰岛","country_id":"354"},{"id":209,"cname":"印度","country_id":"91"},{"id":210,"cname":"印尼","country_id":"62"},{"id":207,"cname":"伊朗","country_id":"98"},{"id":206,"cname":"伊拉克","country_id":"964"},{"id":29,"cname":"爱尔兰","country_id":"353"},{"id":208,"cname":"以色列","country_id":"972"},{"id":200,"cname":"科特迪瓦","country_id":"225"},{"id":203,"cname":"牙买加","country_id":"1876"},{"id":211,"cname":"约旦","country_id":"962"},{"id":106,"cname":"肯尼亚","country_id":"254"},{"id":89,"cname":"基里巴斯","country_id":"686"},{"id":85,"cname":"朝鲜","country_id":"850"},{"id":104,"cname":"科威特","country_id":"965"},{"id":91,"cname":"吉尔吉斯斯坦","country_id":"996"},{"id":110,"cname":"老挝","country_id":"856"},{"id":108,"cname":"拉脱维亚","country_id":"371"},{"id":111,"cname":"黎巴嫩","country_id":"961"},{"id":109,"cname":"莱索托","country_id":"266"},{"id":113,"cname":"利比里亚","country_id":"231"},{"id":114,"cname":"利比亚","country_id":"218"},{"id":112,"cname":"立陶宛","country_id":"370"},{"id":115,"cname":"卢森堡","country_id":"352"},{"id":124,"cname":"马其顿","country_id":"389"},{"id":118,"cname":"马达加斯加","country_id":"261"},{"id":121,"cname":"马拉维","country_id":"265"},{"id":119,"cname":"马尔代夫","country_id":"960"},{"id":122,"cname":"马里","country_id":"223"},{"id":120,"cname":"马耳他","country_id":"356"},{"id":123,"cname":"马里亚纳岛","country_id":"1670"},{"id":126,"cname":"马歇尔岛","country_id":"692"},{"id":125,"cname":"马提尼克岛","country_id":"596"},{"id":128,"cname":"毛里塔尼亚","country_id":"222"},{"id":127,"cname":"毛里求斯","country_id":"230"},{"id":139,"cname":"墨西哥","country_id":"52"},{"id":133,"cname":"密克罗尼西亚","country_id":"691"},{"id":135,"cname":"摩尔多瓦","country_id":"373"},{"id":137,"cname":"摩纳哥","country_id":"377"},{"id":129,"cname":"蒙古","country_id":"976"},{"id":130,"cname":"蒙特塞拉特岛","country_id":"1664"},{"id":136,"cname":"摩洛哥","country_id":"212"},{"id":138,"cname":"莫桑比克","country_id":"258"},{"id":134,"cname":"缅甸","country_id":"95"},{"id":140,"cname":"纳米比亚","country_id":"264"},{"id":143,"cname":"瑙鲁","country_id":"674"},{"id":144,"cname":"尼泊尔","country_id":"977"},{"id":86,"cname":"荷兰","country_id":"31"},{"id":145,"cname":"尼加拉瓜","country_id":"505"},{"id":146,"cname":"尼日尔","country_id":"227"},{"id":147,"cname":"尼日利亚","country_id":"234"},{"id":148,"cname":"纽埃岛","country_id":"683"},{"id":150,"cname":"诺福克岛","country_id":"672"},{"id":149,"cname":"挪威","country_id":"47"},{"id":25,"cname":"阿曼","country_id":"968"},{"id":38,"cname":"巴基斯坦","country_id":"92"},{"id":151,"cname":"帕劳","country_id":"680"},{"id":41,"cname":"巴拿马","country_id":"507"},{"id":36,"cname":"巴布亚新几内亚","country_id":"675"},{"id":39,"cname":"巴拉圭","country_id":"595"},{"id":132,"cname":"秘鲁","country_id":"51"},{"id":69,"cname":"菲律宾","country_id":"63"},{"id":50,"cname":"波兰","country_id":"48"},{"id":152,"cname":"葡萄牙","country_id":"351"},{"id":48,"cname":"波多黎各","country_id":"1787"},{"id":101,"cname":"卡塔尔","country_id":"974"},{"id":99,"cname":"聚会岛","country_id":"262"},{"id":117,"cname":"罗马尼亚","country_id":"40"},{"id":116,"cname":"卢旺达","country_id":"250"},{"id":159,"cname":"萨摩亚,东部","country_id":"684"},{"id":158,"cname":"萨摩亚,西部","country_id":"685"},{"id":168,"cname":"圣马力诺","country_id":"378"},{"id":166,"cname":"圣多美和普林西比","country_id":"239"},{"id":165,"cname":"沙特阿拉伯","country_id":"966"},{"id":161,"cname":"塞内加尔","country_id":"221"},{"id":163,"cname":"塞舌尔共和国","country_id":"248"},{"id":160,"cname":"塞拉利昂","country_id":"232"},{"id":171,"cname":"斯洛伐克","country_id":"421"},{"id":172,"cname":"斯洛文尼亚","country_id":"386"},{"id":176,"cname":"所罗门群岛","country_id":"677"},{"id":177,"cname":"索马里","country_id":"252"},{"id":141,"cname":"南非","country_id":"27"},{"id":198,"cname":"西班牙","country_id":"34"},{"id":170,"cname":"斯里兰卡","country_id":"94"},{"id":167,"cname":"圣卢西亚","country_id":"1784"},{"id":169,"cname":"圣皮埃尔和密克隆群岛","country_id":"508"},{"id":174,"cname":"苏丹","country_id":"249"},{"id":175,"cname":"苏里南","country_id":"597"},{"id":173,"cname":"斯威士兰","country_id":"268"},{"id":155,"cname":"瑞典","country_id":"46"},{"id":156,"cname":"瑞士","country_id":"41"},{"id":202,"cname":"叙利亚","country_id":"963"},{"id":179,"cname":"坦桑尼亚","country_id":"255"},{"id":178,"cname":"泰国","country_id":"66"},{"id":60,"cname":"多哥","country_id":"228"},{"id":188,"cname":"托克劳岛","country_id":"690"},{"id":180,"cname":"汤加","country_id":"676"},{"id":182,"cname":"特立尼达和多巴哥","country_id":"1868"},{"id":184,"cname":"突尼斯","country_id":"216"},{"id":186,"cname":"土耳其","country_id":"90"},{"id":187,"cname":"土库曼斯坦","country_id":"993"},{"id":181,"cname":"特克斯和凯科斯","country_id":"1649"},{"id":185,"cname":"图瓦卢","country_id":"688"},{"id":194,"cname":"乌干达","country_id":"256"},{"id":195,"cname":"乌克兰","country_id":"380"},{"id":24,"cname":"阿联酋","country_id":"971"},{"id":196,"cname":"乌拉圭","country_id":"598"},{"id":197,"cname":"乌兹别克斯坦","country_id":"998"},{"id":189,"cname":"瓦努阿图","country_id":"678"},{"id":192,"cname":"委内瑞拉","country_id":"58"},{"id":212,"cname":"越南","country_id":"84"},{"id":191,"cname":"维珍群岛(英属)","country_id":"1284"},{"id":190,"cname":"维珍群岛(美属)","country_id":"1340"},{"id":88,"cname":"维克岛","country_id":"1808"},{"id":153,"cname":"瓦利斯群岛和富图纳群岛","country_id":"1681"},{"id":205,"cname":"也门","country_id":"967"},{"id":142,"cname":"塞尔维亚","country_id":"381"},{"id":213,"cname":"赞比亚","country_id":"260"},{"id":164,"cname":"桑给巴尔岛","country_id":"259"},{"id":98,"cname":"津巴布韦","country_id":"263"}]}}
标签:并打印,python,country,json,cname,cookie,print,post,id
From: https://www.cnblogs.com/ikaros-521/p/17138065.html