import json
import os
import re
try:
import cookielib
except:
import http.cookiejar as cookielib
import requests
import time
# 使用登录cookie信息
session = requests.session()
cookie_path = os.path.join(os.path.abspath(os.path.dirname(__file__)),'zhihu_cookie.txt')
session.cookies = cookielib.LWPCookieJar(filename=cookie_path)
try:
session.cookies.load(ignore_discard=True)
except:
print("Cookie 未能加载")
header = {
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36",
'Host': "www.zhihu.com",
'Origin': "http://www.zhihu.com",
'Pragma': "no-cache",
'Referer': "http://www.zhihu.com/",
'X-Requested-With': "XMLHttpRequest"
}
def search_xsrf():
index_url = 'https://www.zhihu.com'
index_page = session.get(index_url, headers=header)
xsrf = index_page.request._cookies.get("_xsrf")
return xsrf
#下载图片并且验证验证码
def down_captha():
captha_url = 'https://www.zhihu.com/captcha.gif?r=%d&type=login&lang=cn' % (int(time.time()*1000))
response = session.get(captha_url,headers=header)
with open('captcha.gif','wb') as f:
f.write(response.content)
f.close()
from PIL import Image
try:
img = Image.open('captcha.gif')
img.show()
img.close()
except:
pass
captcha = {
'img_size':[200,44],
'input_points':[],
}
points = [[16.875, 28], [32.875, 27], [65.875, 31], [88.875, 24], [106.875, 24], [147.875, 30],
[174.875, 29]]
seq = input('请输入倒立字的位置\n>')
for i in seq:
captcha['input_points'].append(points[int(i)-1])
return json.dumps(captcha)#因为本身是json格式的
def zhihu_Login(account=None,password=None):
if account == None:
print("请输入账户")
account = input()
print("请输入密码")
# password = getpass("请输入密码:")
password = input()
if re.match('1\d{10}',account):
print("手机号登录")
post_url='https://www.zhihu.com/login/phone_num'
post_form={
'_xsrf':search_xsrf(),
'password':password,
# 'captcha':down_captha(),
'remember_me': 'true',
# 'captcha_type':'cn',
'phone_num':account
}
response_text = session.post(post_url,data=post_form,headers=header)
print(response_text)
if response_text.status_code == 200:
print("登录成功")
else:
print("登录失败,请重新登录")
# 需要输入验证码后才能登录成功
post_form["captcha"] = down_captha()
response_text = session.post(post_url, data=post_form, headers=header)
if response_text.status_code != 200:
print("登录失败,请重新登录")
return
session.cookies.save(cookie_path)
if __name__=='__main__':
zhihu_Login()