关于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/这个网站的登录有些怪异,只能怪自己才学疏浅吧,未能如愿