码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-20 15:00:58      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

  不久前,通过网上查阅各种资料,一直想利用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/这个网站的登录有些怪异,只能怪自己才学疏浅吧,未能如愿

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

标签:

原文地址:http://www.cnblogs.com/degrone/p/4744979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!