#!/usr/bin/env python
'''
#-*- coding: utf-8 -*-
'''

import time
import requests
from http import cookiejar
from bs4 import BeautifulSoup

class Spider:
    def __init__(self,url=None,headers=None,captcha_url=None,login_url=None):
        #前面的这些参数可以用**keyargs来输入
        self.url = url
        self.headers = headers
        self.login_name = None
        self.passwd = None
        self.captcha_url = captcha_url
        self.login_url = login_url
        #
        self.session = requests.session()

    def get_login(self,login_name=None,passwd=None):
        if login_name is None:
            self.login_name = input("用户名：")
        else:
            self.login_name = login_name
        if passwd is None:
            self.passwd = input("密码：")
        else:
            self.passwd = passwd

    def get_xsrf(self):
        res = requests.get(url=self.url,headers=self.headers)
        soup = BeautifulSoup(res,'html.parser')
        xsrf = soup.find(name='input',attrs={'name':'_xsrf'}).get('value')
        return xsrf

    def get_captcha(self):
        """
        验证码的问题，当在浏览器登陆过，即便是退出登录再登陆也不会要输入验证码，该问题是浏览器的cookies导致的
        清空浏览器的cookies，再次登陆就会出现需要输入验证码
        知乎浏览器验证码地址：https://www.zhihu.com/captcha.gif?r=1497427163063&type=login&lang=cn
        注意到后面有一个&lang=cn(个人认为是知乎网识别到登陆客户端是中文环境，给出的图片是中文汉字，识别复杂)
        手动将&lang=cn改为en，或者直接将&lang=cn去掉，验证码就变成字母了，然后就可以使用自动识别的三方库来完成
        手动填写验证码点击登陆后，审查元素才能跟踪到email文件，进行能查看到表单输入
        （中文图片需要点击提示的文字，captcha传入的是图片的大小，以及点击的位置的坐标）
        :return:
        """
        t = str(int(time.time()*1000))
        if self.captcha_url is None:
            print("captcha_url is None!!!")
            self.captcha_url = input('请输入captcha_url：')
        #通过验证码地址，获取验证码图片
        res_jpg = requests.get(url=self.captcha_url,headers=self.headers)
        #将验证码保存在文件中
        with open('captcha.jpg','wb') as f:
            f.write(res_jpg.content)
        captcha = input("请识别图片中的验证码：")
        return captcha

    def login(self):
        #根据登录的方式不同，login_url不一样
        #邮箱登录，如：'https://www.zhihu.com/login/email
        #手机号登录，如：https://www.zhihu.com/login/phone_num
        #login_url = self.login_url;
        data = {
            'email':self.login_name,
            'password':self.passwd,
            '_xsrf':self.get_xsrf(),
            'captcha':self.get_captcha()
        }
        #返回json
        res_json = requests.post(url=self.login_url,data=data,headers=self.headers)
        #json结果样例
        #成功：{'r': 0, 'msg': '登录成功'}  失败：{'r': 1, 'errcode': 1991829, 'data': {'captcha': '请提交正确的验证码 :(', 'name': 'ERR_VERIFY_CAPTCHA'}, 'msg': '请提交正确的验证码 :('}
        if res_json.json().get('r') == 0:




if __name__ == '__main__':
    url = 'https://www.zhihu.com/'

    spider1 = Spider(url=url)
    spider1.get_login()
    print(spider1.login_name)
    print(spider1.passwd)

# url = 'http://www.zhihu.com/'
# session = requests.session()
#
# print(url)
#
# requests.cookies.RequestsCookieJar