def getCaptcha(): captchaImgUrl = 'https://passport.lagou.com/vcode/create?from=register&refresh=%s' % time.time() # 写入验证码图片 f = open(CaptchaImagePath, 'wb') f.write(session.get(captchaImgUrl, headers=HEADERS).content) f.close() verify_code, yundama_obj, cid = code_verificate(YUMDAMA_USERNAME, YUMDAMA_PASSWORD, CaptchaImagePath) return verify_code
def login_by_pincode(name, password, session, server_data, retry_count): post_url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)' servertime = server_data["servertime"] nonce = server_data['nonce'] rsakv = server_data["rsakv"] pubkey = server_data["pubkey"] pcid = server_data['pcid'] sp = get_password(password, servertime, nonce, pubkey) # 提交的数据可以根据抓包获得 data = { 'encoding': 'UTF-8', 'entry': 'weibo', 'from': '', 'gateway': '1', 'nonce': nonce, 'pagerefer': "", 'prelt': 67, 'pwencode': 'rsa2', "returntype": "META", 'rsakv': rsakv, 'savestate': '7', 'servertime': servertime, 'service': 'miniblog', 'sp': sp, 'sr': '1920*1080', 'su': get_encodename(name), 'useticket': '1', 'vsnf': '1', 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', 'pcid': pcid } if not yundama_username: raise Exception( '由于本次登录需要验证码,请配置顶部位置云打码的用户名{}和及相关密码'.format(yundama_username)) img_url = get_pincode_url(pcid) pincode_name = get_img(img_url, name, retry_count) verify_code, yundama_obj, cid = code_verification.code_verificate( yundama_username, yundama_password, pincode_name) data['door'] = verify_code rs = get_redirect(name, data, post_url, session) os.remove(pincode_name) return rs, yundama_obj, cid, session
def login_by_pincode(name, password, session, server_data, retry_count): post_url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)' servertime = server_data["servertime"] nonce = server_data['nonce'] rsakv = server_data["rsakv"] pubkey = server_data["pubkey"] pcid = server_data['pcid'] sp = get_password(password, servertime, nonce, pubkey) data = { 'encoding': 'UTF-8', 'entry': 'weibo', 'from': '', 'gateway': '1', 'nonce': nonce, 'pagerefer': "", 'prelt': 67, 'pwencode': 'rsa2', "returntype": "META", 'rsakv': rsakv, 'savestate': '7', 'servertime': servertime, 'service': 'miniblog', 'sp': sp, 'sr': '1920*1080', 'su': get_encodename(name), 'useticket': '1', 'vsnf': '1', 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', 'pcid': pcid } if not yundama_username: raise Exception('login need verfication code, please set your yumdama info in config/spider.yaml') img_url = get_pincode_url(pcid) pincode_name = get_img(img_url, name, retry_count) verify_code, yundama_obj, cid = code_verification.code_verificate(yundama_username, yundama_password, pincode_name) data['door'] = verify_code rs = get_redirect(name, data, post_url, session) os.remove(pincode_name) return rs, yundama_obj, cid, session
def do_login(name, password, need_verify): session = requests.Session() su = get_encodename(name) sever_data = get_server_data(su, session) servertime = sever_data["servertime"] nonce = sever_data['nonce'] rsakv = sever_data["rsakv"] pubkey = sever_data["pubkey"] sp = get_password(password, servertime, nonce, pubkey) # 提交的数据可以根据抓包获得 data = { 'encoding': 'UTF-8', 'entry': 'weibo', 'from': '', 'gateway': '1', 'nonce': nonce, 'pagerefer': "", 'prelt': 67, 'pwencode': 'rsa2', "returntype": "META", 'rsakv': rsakv, 'savestate': '7', 'servertime': servertime, 'service': 'miniblog', 'sp': sp, 'sr': '1920*1080', 'su': su, 'useticket': '1', 'vsnf': '1', 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack' } yundama_obj = None cid = '' # 你也可以改为手动填写验证码 # 之所以会有need_verify这个字段,是因为某些账号虽然可能不正常,但是它在预登陆的时候会返回pincode=0,而实际上却是需要验证码的 # 所以这里通过用户自己控制 if need_verify: if not yundama_username: raise Exception( '由于本次登录需要验证码,请配置顶部位置云打码的用户名{}和及相关密码'.format(yundama_username)) pcid = sever_data['pcid'] data['pcid'] = pcid img_url = get_pincode_url(pcid) get_img(img_url) verify_code, yundama_obj, cid = code_verification.code_verificate( yundama_username, yundama_password, verify_code_path) data['door'] = verify_code post_url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)' url = get_redirect(name, data, post_url, session) return url, yundama_obj, cid, session