关于python模拟登录的一点实践

  不久前,通过网上查阅各种资料,一直想利用python来实现模拟登录的功能,通过csdn汪海的博客学会了一点,但也只能算个皮毛,亦或皮毛都算不上。

边查阅资料边写一个小东西,起初想写一个程序,通过暴力破解+模拟登录的方式来实现破解学校一卡通的密码,孰料,强力破解面对六位数的密码的1000000种尝试,很难短时间破解,另一原因在于暴力尝试的时候服务器端总是出问题,代号为500,遂搁浅。

  现在只实现了有密码的登录一个人的帐号,读出首页信息,具体的消费记录涉及到翻页的问题,每次翻页都会提交一串好长的串,不能理解。

代码如下:

 1 # -*-coding:utf-8-*-
 2 import requests
 3 import re
 4 class TOOl:
 5     removingfont=re.compile('[\n]*?',re.S)
 6     def replace(self,x):
 7         x=re.sub(self.removingfont,"",x)
 8         return x.strip()
 9 class YKTCX:
10     def __init__(self):
11         ###登录页的url
12         self.url = 'http://ecard.jit.edu.cn/cxweb/Default.aspx'
13         self.url2='http://ecard.jit.edu.cn/cxweb/information.aspx'
14         ###有些网站反爬虫,这里用headers把程序伪装成浏览器
15         self.header = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36' }
16 ###登录需要提交的表单
17         self.form_data = {'__LASTFOCUS':'',
18                     '__EVENTTARGET':'login',
19                     '__EVENTARGUMENT':'',
20                     '__VIEWSTATE':'/wEPDwULLTE3NjgxMTcwNzgPZBYCAgEPZBYCAgsPDxYCHgRUZXh0BSPnlKjmiLflkI3miJblr4bnoIHplJnor68s6K+35qOA5p+lIWRkZFM8z2dw6ByHwFFBvycALiWDa9q3',
21 'TextBox1':'xxxxxx', #填入网站的上网帐号
22     'TextBox2':'xxxxx',  #填入网站密码(加密后的)
23 '__EVENTVALIDATION':'/wEWBAKp05aFCwLs0bLrBgLs0fbZDAKPyPGACtrG6xUCnmOzvJ+yqUZ87xcAfrth',}
24         self.form_data['TextBox1']='01305xxxx'
25         self.form_data['TextBox2']='xxxxx'
26         self.tool=TOOl()
27     def login(self):
28         s = requests.session()
29         response = s.post(self.url,data = self.form_data,headers = self.header)
30     #    print response.content
31         r=s.get(self.url2,allow_redirects = False)
32 #        print r.content
33         if r.status_code==200:
34             print self.name(r.content)+'\n'+self.banji(r.content)+'\n'+self.banknumber(r.content)+'\n'+self.stuid(r.content)[1:]
35         else:
36             print '请求出错\n'
37         r=s.get('http://ecard.jit.edu.cn/cxweb/consumesele.aspx')
38         if r.status_code==200:
39 #            print r.content
40             self.details(r.content)
41 
42 
43     def title(self,page):
44         pattern=re.compile('(<title>)(.*?)(</title>)')
45         result=re.search(pattern,page)
46         if result:
47             return result.group(1)    
48         else:
49             return None
50     def name(self,page):
51         pattern=re.compile('<span id="MEMBER_NAME">(.*?)</span>',re.S)
52         result=re.search(pattern,page)
53         if result:
54             return result.group(1)
55         else:
56             return None
57     def idcard(self,page):
58         pattern=re.compile('<span id="IDENTITY_CARD">(.*?)</span>',re.S)    
59         result=re.search(pattern,page)
60         if result:
61             return result.group(1)
62         else:
63             return None    
64     def stuid(self,page):
65         pattern=re.compile('<span id="MEMBER_CODE">(.*?)</span>',re.S)    
66         result=re.search(pattern,page)
67         if result:
68             return result.group(1)
69         else:
70             return None
71     def banji(self,page):
72         pattern=re.compile('<span id="DEPT_DESCRIPTION">(.*?)</span>',re.S)    
73         result=re.search(pattern,page)
74         if result:
75             return result.group(1)
76         else:
77             return None
78     def banknumber(self,page):
79         pattern=re.compile('<span id="BANKNUMBER">(.*?)</span>',re.S)    
80         result=re.search(pattern,page)
81         if result:
82             return result.group(1)
83         else:
84             return None
85     def details(self,page):
86         pattern=re.compile('<td align="center"><font face="宋体" color="#000066">(.*?)</font></td>',re.S)    
87         results=re.findall(pattern,page)
88         if results:
89             for item in results:
90     #        print self.tool.replace(results[1])
91                 print self.tool.replace(item)
92             print"____________________-"
93         else:
94             return None
95 
96 a=YKTCX()
97 a.login()

 今天六级分数出来,由于忘记了准考证号码,想利用同学的号码来遍历一下实现不同尝试,无奈http://www.chsi.com.cn/cet/这个网站的登录有些怪异,只能怪自己才学疏浅吧,未能如愿

posted on 2015-08-20 13:56  Degrone  阅读(545)  评论(0编辑  收藏  举报

导航