模拟知乎登录方法

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()

 

posted @ 2018-10-26 16:58  进击小螺号  阅读(352)  评论(0)    收藏  举报