1
1
#coding=gbk
2
2
3
3
from __future__ import unicode_literals
4
- import sys ,re
4
+ import sys ,re , os
5
5
import urllib ,urllib2 ,cookielib
6
6
7
7
class TBLogin ():
8
8
9
- def __init__ (self ,user ,pwd ):
9
+ user = None
10
+ pwd = None
11
+
12
+ __verifyCode = re .compile ('<img id="J_StandardCode_m" .*?src="(.*?)".*?>' ,re .S )
13
+ __commonError = re .compile ('<div id="J_Message" class="login-msg msg">.*<p class="error">(.*?)</div>' ,re .S )
14
+
15
+ def __init__ (self ,user = None ,pwd = None ):
10
16
#获取一个保存cookie的对象
11
17
cj = cookielib .LWPCookieJar ()
12
18
#将一个保存cookie对象,和一个HTTP的cookie的处理器绑定
@@ -37,10 +43,11 @@ def getLoginData(self):
37
43
"""
38
44
39
45
login_data = {
40
- 'ua' :'' ,
46
+ #ua 据说是记录用户点击和输入信息的
47
+ 'ua' :'084tRPCEzNDcxNjgzNTAyMTY9U=|tRODwiImJyLV|tSPCtSJklidWZvaHIsITU8IidZbmRvZ3NyLV1Q==|tRODwiI3liLV|tTPCtYODwgPCEyNjM8JjY0PCEyODA8KDAwPCEyODA8JzYwPV1Q==|tYPCIiLV|tZPCIiLV|tRODwiLG9iLV|tRMTwrUihkdHBzej8vLG9naW5uJHFvYmFvbiNvbW8tZW1iZWJ/LG9naW5uKmhkfWxvMnVkaWJ1Y2R1UlxNOGR0cHUjMUUiNkUiNkd3d34kcW9iYW9uI29tZSI2QiwiKGR0cHo/LyxvZ2lubiRxb2Jhb24jb21vLWVtYmVifyxvZ29ldH4qaGR9bG8zcH1tMT4hMDAwMzg2PiA+Jj4pMjM3NDk2Jm00f2B2L2V0fTRydXVmInVkaWJ1Y2R1UlxNOGR0cHUjMUUiNkUiNkd3d34kcW9iYW9uI29tZSI2Qi1dU=|tRMjwiLG9naW5iLV|tRODwiKWRiLV|tRODwiJ2xjf2ItU=|tRMDwiK1Q1MzI5PCxSITM0NTk1MjMxNTkwMjxwPiE0Mzg2NzY0NDg4MTIzNjI3PFIsIT1SLV|tRMzwrUidZbmRvZ3NyLCInWU5AITE8IzwjMDA8IjcxMi1dU=|tRODwiLWByLV|tUPCtSIiwpNDQ8IjM3PCEwNDQwPV1Q==|tRODwiLWNiLV|tVPCtSIiwrUTA2NjwiNjY9XCA8IiIsITA3NTA9XV|tRODwiJmliLV|tXPCtSIiwhPCEwNzU2PV1Q==|tRODwiLWByLV|tUPCtSIiwhMDU0PCMwMTwhMjE5Nz1dU=|tRODwiLWNiLV|tVPCtSIiwrUTA1NDwjMDE9XCA8IiIsITIzMDQ9XV|tRODwiK2NyLV|tWPCtSIiwhMjM8IDwhMzA0MD1dU=|tRODwiLWNiLV|tVPCtSIiwrUTA1NDwjMDE9XCA8IiIsITQxNDE9XV|tRODwiJmliLV|tXPCtSIiwgPCIwMjE1PV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MTwiNTI9XCA8IiIsITA2OTMwPV1Q==|tRODwiJmliLV|tXPCtSIiwhPCEwNjk0Mj1dU=|tRODwiJmliLV|tXPCtSKk9TUWZlbE9naW5jSGVja2IsITwhMDY5NTQ9XV|tRODwiLWByLV|tUPCtSKk9TUWZlbE9naW5jSGVja2IsKDUwPCI1MzwhMDc2MDY9XV|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MDwiNTY9XCA8IiIsITA4MjgyPV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MDwiNTY9XCA8IiIsITA4OTEzPV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MDwiNTY9XCA8IiIsITA5NjAwPV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MDwiNTY9XCA8IiIsITEwNTU4PV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MDwiNTY9XCA8IiIsITExMjA5PV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1NDwiNTE9XCA8IiIsITEyNjc0PV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MDwiNTM9XCA8IiIsITE5MTk2PV1Q==|tRODwiLWNiLV|tVPCtSKk9TUWZlbE9naW5jSGVja2IsK1g1MDwiNTM9XCA8IiIsITIwOTk2PV1Q==|tRODwiJmliLV|tXPCtSKk9TUWZlbE9naW5jSGVja2IsIDwhMjQyODQ9XV|tRODwiJmliLV|tXPCtSIiwgPCEyNDMwMD1dU=' ,
41
48
'TPL_username' :self .user .encode ('gbk' ),
42
49
'TPL_password' :self .pwd ,
43
- 'TPL_checkcode' :'' ,
50
+ 'TPL_checkcode' :'http://www.taobao.com ' ,
44
51
'need_check_code' :'' ,
45
52
'longLogin' :'1' , #十天免登陆
46
53
'action' :'Authenticator' ,
@@ -50,14 +57,14 @@ def getLoginData(self):
50
57
'fc' :'default' ,
51
58
'style' :'default' ,
52
59
'css_style' :'' ,
53
- 'tid' :'' ,
60
+ 'tid' :'XOR_1_000000000000000000000000000000_6358475540797D727877707E ' ,
54
61
'support' :'000001' ,
55
62
'CtrlVersion' :'1,0,0,7' ,
56
63
'loginType' :'3' ,
57
64
'minititle' :'' ,
58
65
'minipara' :'' ,
59
- 'umto' :'' ,
60
- 'pstrong' :'3 ' ,
66
+ 'umto' :'Te2cf41fa2b993f1082c87e7decec3f65 ' ,
67
+ 'pstrong' :'2 ' ,
61
68
# 'longLogin':'-1',
62
69
'llnick' :'' ,
63
70
'sign' :'' ,
@@ -70,24 +77,44 @@ def getLoginData(self):
70
77
'not_duplite_str' :'' ,
71
78
'need_user_id' :'' ,
72
79
'poy' :'' ,
73
- 'gvfdcname' :'' ,
74
- 'gvfdcre' :'' ,
80
+ 'gvfdcname' :'10 ' ,
81
+ 'gvfdcre' :'' , #可以没有
75
82
'from_encoding' :''
76
83
}
77
84
return login_data
78
85
79
- def login (self ):
86
+ def login (self , postData = None ):
80
87
88
+ if postData is None :
89
+ postData = self .getLoginData ()
90
+
81
91
url = 'https://login.taobao.com/member/login.jhtml'
82
- source = self .request (url ,self . getLoginData () )
92
+ source = self .request (url ,postData )
83
93
if source :
84
94
print source
85
- print self .checkLoginError (source )
95
+ error = self .checkLoginError (source )
96
+ print error
97
+ if error :
98
+ if error .find ('为了您的账号安全,请输入验证码。' ) != - 1 \
99
+ or error .find ('验证码错误,请重新输入。' ) != - 1 :
100
+ r = self .__verifyCode .search (source )
101
+ if r :
102
+ s = self .request (r .group (1 ))
103
+ f = open ("verifyCode.jpg" ,"wb" )
104
+ f .write (s )
105
+ f .close ()
106
+ os .system ('verifyCode.jpg' )
107
+ postData ['need_check_code' ] = 'true'
108
+ postData ['TPL_checkcode' ] = raw_input ("please input verifycode:" )
109
+ self .login (postData )
110
+
111
+ if error .find ('您输入的密码和账户名不匹配,请重新输入' ) != - 1 :
112
+ print '您输入的密码和账户名不匹配,请重新输入'
113
+ return
114
+
86
115
87
- def checkLoginError (self ,source ):
88
-
89
- needVerifyCodeError = re .compile ('<div id="J_Message" class="login-msg msg">.*<p class="error">(.*?)</div>' ,re .S )
90
- r = needVerifyCodeError .search (source )
116
+ def checkLoginError (self ,source ):
117
+ r = self .__commonError .search (source )
91
118
return r .group (1 ) if r else None
92
119
93
120
def request (self ,url ,postData = dict ()):
@@ -104,11 +131,15 @@ def request(self,url,postData=dict()):
104
131
request = urllib2 .urlopen (req )
105
132
source = request .read ()
106
133
# print request.code,request.msg
107
- request .close ()
134
+ # request.close()
108
135
return source
109
136
except :
110
137
info = sys .exc_info ()
111
- print info [0 ],":" ,info [1 ]
138
+ print info [0 ],":" ,info [1 ]
112
139
return None
113
140
114
141
if __name__ == '__main__' :
142
+ t = TBLogin ()
143
+ t .user = 'autorunforscott'
144
+ t .pwd = ''
145
+ t .login ()
0 commit comments