zoukankan      html  css  js  c++  java
  • 关于python模拟登录的一点实践

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

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

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

    代码如下:

     1 # -*-coding:utf-8-*-
     2 import requests
     3 import re
     4 class TOOl:
     5     removingfont=re.compile('[
    ]*?',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)+'
    '+self.banji(r.content)+'
    '+self.banknumber(r.content)+'
    '+self.stuid(r.content)[1:]
    35         else:
    36             print '请求出错
    '
    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/这个网站的登录有些怪异,只能怪自己才学疏浅吧,未能如愿

  • 相关阅读:
    在django中,执行原始sql语句
    Django的select_related 和 prefetch_related 函数优化查询
    Django -- settings 详解
    Django-models的字段类型
    ORM
    django-response对象
    spark集群进入 bin 下面目录./spark-shell 出现Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Hbase启动的时候出现:[RpcServer.handler=28,port=60000] ipc.RpcServer: RpcServer.handler=28,port=60000: exiting,master.HMasterCommandLine: Master exiting
    c++实现写一个函数,求2个整数的和,要求在函数体内不得使用+,-* /
    nutch二次开发环境搭建
  • 原文地址:https://www.cnblogs.com/degrone/p/4744979.html
Copyright © 2011-2022 走看看