首次登录,下载验证码图片,手动输入。
之后利用cookie文件登录。
LOG_FILE_NAME='log文件'
COOKIE_FILE_NAME='cookie保存文件'
RENREN_EMAIL='用户名'
RENREN_PASSWORD='密码'
LOCAL_VERIFYCODE_FILENAME='验证码下载文件名.jpg'
代码:
- #!/usr/bin/python
-
# -*- coding: utf-8 -*-
-
-
'''
-
Time-stamp:
-
'''
-
import urllib
-
import urllib2
-
import cookielib
-
import sys
-
import time
-
import thread
-
import commands
-
import re
-
-
-
def loaded_the_cookie(cookie, file_name = 'cookie.txt'):
-
"""
-
-
Arguments:
-
- `file_name`:
-
- `cookie`:
-
-
"""
-
try:
-
cookie.load(file_name)
-
except IOError, e:
-
print e
-
return False
-
except Exception, e:
-
print e
-
return False
-
return True
-
pass
-
-
-
def login(email, password):
-
"""
-
Arguments:
-
- `email`:
-
- `password`:
-
"""
-
post_parameters = get_post_parameters("")
-
-
verifycode_src = post_parameters['icode_src']
-
file_name = download_verifycode(verifycode_src)
-
-
verifycode = send_msg_to_input('验证码下载完毕['+file_name+'],输入验证码:')
-
post_parameters['icode'] = verifycode
-
-
post_parameters['password']=password
-
post_parameters['email']=email
-
post_parameters['domain']='renren.com'
-
-
post_parameters['origURL']=''
-
post_parameters['key_id']='1'
-
post_parameters['autoLogin']='true'
-
-
return do_login_success(post_parameters)
-
-
-
def send_msg_to_input(msg):
-
"""
-
Arguments:
-
- `msg`:
-
"""
-
return raw_input(msg)
-
-
LOCAL_VERIFYCODE_FILENAME='default.jpg'
-
def download_verifycode(src):
-
"""
-
Arguments:
-
- `src`:
-
"""
-
response = send_request(src)
-
f = open(LOCAL_VERIFYCODE_FILENAME,'w')
-
f.write(response)
-
f.close()
-
return LOCAL_VERIFYCODE_FILENAME
-
-
-
POST_PARAMETERS_PATTERN={
-
'_rtk':{'re':"get_check_x:'[0-9a-z]+'",'split':"'",'offset':1},
-
'requestToken':{'re':"get_check:'[0-9]+'",'split':"'",'offset':1},
-
'icode_src':{'re':'id="verifyPic_login".*src="[^"]+"','split':'"','offset':3},
-
}
-
def get_post_parameters(url):
-
"""
-
"""
-
response = send_request(url)
-
post_parameters = {}
-
for key, pattern in POST_PARAMETERS_PATTERN.items():
-
for item in re.findall(pattern['re'], response):
-
post_parameters[key] = item.split(pattern['split'])[pattern['offset']]
-
-
return post_parameters
-
-
-
-
def do_login_success(post_parameters):
-
"""
-
-
Arguments:
-
- `post_parameters`:
-
"""
-
response = send_request("", post_parameters)
-
if 'code' in response and 'true' in response:
-
return True
-
return False
-
-
-
def send_request(url, post_parameters = None):
-
"""
-
-
Arguments:
-
- `url`:
-
- `post_data`:
-
"""
-
if "http://" not in url:
-
url = "http://" + url
-
if post_parameters is not None:
-
post_data = urllib.urlencode(post_parameters)
-
req = urllib2.Request(url,post_data)
-
else:
-
req = urllib2.Request(url)
-
-
resp = urllib2.urlopen(req)
-
result = resp.read()
-
-
return result
-
-
-
def bind_handle_for_http(cookie):
-
"""
-
-
"""
-
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
-
urllib2.install_opener(opener)
-
-
-
def clear_news():
-
"""
-
"""
-
post_parameters = get_post_parameters("")
-
post_parameters['t'] = 'a'
-
return send_request("",post_parameters)
-
-
-
def LOG(log, file_handle):
-
"""
-
-
Arguments:
-
- `log`:
-
- `file_handle`:
-
"""
-
file_handle.write(log)
-
file_handle.flush()
-
-
LOG_FILE_NAME='log.db'
-
COOKIE_FILE_NAME='default.cookie'
-
RENREN_EMAIL='***'
-
RENREN_PASSWORD='***'
-
-
-
-
if __name__ == '__main__':
-
cookie = cookielib.LWPCookieJar()
-
need_login = False
-
-
if not loaded_the_cookie(cookie, COOKIE_FILE_NAME):
-
need_login = True
-
-
bind_handle_for_http(cookie)
-
-
if need_login:
-
while True:
-
if not login(RENREN_EMAIL, RENREN_PASSWORD):
-
send_msg_to_input('登录失败,回车重试:')
-
else:
-
cookie.save(COOKIE_FILE_NAME)
-
break
-
f = open(LOG_FILE_NAME,'a')
-
while 1==1:
-
clear_news()
-
LOG(time.asctime() + '::cleared.\n',f)
- time.sleep(10)