#!/usr/bin/env python #-*- coding:utf-8 -*- # Build-in / Std import os, sys, time, platform, random import re, json, cookielib # requirements import requests, termcolor requests = requests.Session() requests.cookies = cookielib.LWPCookieJar('cookies') try: requests.cookies.load(ignore_discard=True) except: pass class Logging: flag = True @staticmethod def error(msg): if Logging.flag == True: print "".join( [ termcolor.colored("ERROR", "red"), ": ", termcolor.colored(msg, "white") ] ) @staticmethod def warn(msg): if Logging.flag == True: print "".join( [ termcolor.colored("WARN", "yellow"), ": ", termcolor.colored(msg, "white") ] ) @staticmethod def info(msg): # attrs=['reverse', 'blink'] if Logging.flag == True: print "".join( [ termcolor.colored("INFO", "magenta"), ": ", termcolor.colored(msg, "white") ] ) @staticmethod def debug(msg): if Logging.flag == True: print "".join( [ termcolor.colored("DEBUG", "magenta"), ": ", termcolor.colored(msg, "white") ] ) @staticmethod def success(msg): if Logging.flag == True: print "".join( [ termcolor.colored("SUCCES", "green"), ": ", termcolor.colored(msg, "white") ] ) # Setting Logging Logging.flag = True class LoginPasswordError(Exception): def __init__(self, message): if type(message) != type("") or message == "": self.message = u"帐号密码错误" else: self.message = message Logging.error(self.message) class NetworkError(Exception): def __init__(self, message): if type(message) != type("") or message == "": self.message = u"网络异常" else: self.message = message Logging.error(self.message) class AccountError(Exception): def __init__(self, message): if type(message) != type("") or message == "": self.message = u"帐号类型错误" else: self.message = message Logging.error(self.message) def download_captcha(): url = "http://www.zhihu.com/captcha.gif" r = requests.get(url, params={"r": random.random()} ) if int(r.status_code) != 200: raise NetworkError(u"验证码请求失败") image_name = u"verify." + r.headers['content-type'].split("/")[1] open( image_name, "wb").write(r.content) """ System platform: https://docs.python.org/2/library/platform.html """ Logging.info(u"正在调用外部程序渲染验证码 ... ") if platform.system() == "Linux": Logging.info(u"Command: xdg-open %s &" % image_name ) os.system("xdg-open %s &" % image_name ) elif platform.system() == "Darwin": Logging.info(u"Command: open %s &" % image_name ) os.system("open %s &" % image_name ) elif platform.system() == "SunOS": os.system("open %s &" % image_name ) elif platform.system() == "FreeBSD": os.system("open %s &" % image_name ) elif platform.system() == "Unix": os.system("open %s &" % image_name ) elif platform.system() == "OpenBSD": os.system("open %s &" % image_name ) elif platform.system() == "NetBSD": os.system("open %s &" % image_name ) elif platform.system() == "Windows": os.system("open %s &" % image_name ) else: Logging.info(u"我们无法探测你的作业系统,请自行打开验证码 %s 文件,并输入验证码。" % os.path.join(os.getcwd(), image_name) ) captcha_code = raw_input( termcolor.colored("请输入验证码: ", "cyan") ) return captcha_code def search_xsrf(): url = "http://www.zhihu.com/" r = requests.get(url) if int(r.status_code) != 200: raise NetworkError(u"验证码请求失败") results = re.compile(r"\