转自https://github.com/xchaoinfo/fuck-login.git
from urllib.request import urlretrieve
import requests
from bs4 import BeautifulSoup
from os import remove
import http.cookiejar as cookielib
from PIL import Image
url = 'https://accounts.douban.com/login'
datas = {'source': 'index_nav',
'remember': 'on'}
headers = {'Host':'www.douban.com',
'Referer': 'https://www.douban.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding':'gzip, deflate, br'}
# 尝试使用cookie信息
session = requests.session()
session.cookies = cookielib.LWPCookieJar(filename='cookies')
try:
session.cookies.load(ignore_discard=True)
except:
print("Cookies未能加载")
#cookies加载不成功,则输入账号密码信息
datas['form_email'] = input('Please input your account:')
datas['form_password'] = input('Please input your password:')
#获取图片验证码
def get_captcha():
r = requests.post(url, data=datas, headers=headers)
page = r.text
soup = BeautifulSoup(page, "html.parser")
# 利用bs4获得验证码图片地址 获取图片地址
#<img id="captcha_image" src="https://www.douban.com/misc/captcha?id=OJ3tZcdY85WL6Aj85OP219s4:en&size=s" alt="captcha" class="captcha_image"/>
img_src = soup.find('img', {'id': 'captcha_image'}).get('src')
print('img_src:',img_src)
urlretrieve(img_src, 'captcha.jpg')
try:
im = Image.open('captcha.jpg')
im.show()
im.close()
except:
print('到本地目录打开captcha.jpg获取验证码')
finally:
captcha = input('please input the captcha:')
remove('captcha.jpg')
#<input type="hidden" name="captcha-id" value="OJ3tZcdY85WL6Aj85OP219s4:en"/>
captcha_id = soup.find( 'input', {'type': 'hidden', 'name': 'captcha-id'}).get('value')
return captcha, captcha_id
def isLogin():
'''
通过查看用户个人账户信息来判断是否已经登录
'''
url = "https://www.douban.com/accounts/"
login_code = session.get(url, headers=headers,
allow_redirects=False).status_code
if login_code == 200:
return True
else:
return False
def login():
try:
captcha, captcha_id = get_captcha()
print('captcha:',captcha)
print('captcha_id:',captcha_id)
# 增加表数据
datas['captcha-solution'] = captcha
datas['captcha-id'] = captcha_id
except:
print("无需图片验证码")
# 保存 cookies 到文件,
# 下次可以使用 cookie 直接登录,不需要输入账号和密码
session.cookies.save()
if __name__ == '__main__':
if isLogin():
print('Login successfully')
else:
login()