工欲善其事,必先利其器。网站只能通过交互式登陆吗?当然不是,作为网络蛮荒世界的一个剑客,老黑欲练就自由之剑,呵呵,就是用代码编写可以自动登陆系统的工具,从而获取想要的数据。
简单版:
样板网站:
成绩系统:http://jwc.ecjtu.jx.cn/mis_o/login.htm
账号:jwc
密码:jwc
Now! Let's go! go ! go!
s1:获取实际登陆的url,老黑使用了firefox,live http headers工具,填入账号密码后,获取到实际登陆的url为http://jwc.ecjtu.jx.cn/mis_o/login.php,post信息为: user=jwc&pass=jwc&Submit=%CC%E1%BD%BB
s2:编写python代码模拟登陆,使用到了python中requests
1 # -*- coding: utf-8 -*- 2 import sys 3 import requests 4 reload(sys) 5 sys.setdefaultencoding('utf8') 6 7 url = 'http://jwc.ecjtu.jx.cn/mis_o/login.php' 8 # 1: get 2: post 9 option = '2' 10 if option == '1': 11 url = 'http://www.kfzhongzhou.com/cyjb_xx.asp?id=15' 12 13 output_file = open('D:codehuboutput.html', 'w') 14 datas = {'user': 'jwc', 15 'pass': 'jwc', 16 'Submit': '%CC%E1%BD%BB' 17 } 18 headers = {'Referer': 'http://jwc.ecjtu.jx.cn/mis_o/login.php', 19 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ' 20 '(KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36', 21 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 22 'Accept-Language': 'zh-CN,zh;q=0.8', 23 } 24 if __name__ == '__main__': 25 print '开始!' 26 responses = None 27 sessions = requests.session() 28 if option == '1': 29 responses = sessions.get(url) 30 else: 31 responses = sessions.post(url, headers=headers, data=datas) 32 print responses.headers 33 print responses.status_code 34 35 r2 = sessions.get('http://jwc.ecjtu.jx.cn/mis_o/main.php') 36 context = r2.text 37 output_file.write(context) 38 print '结束!' 39 output_file.close()
解释:构造sessions进行登陆,保证可以下载正常登陆后才能访问道的main.php页面,进行验证是否登陆成功。
s3:效果,main.php内容被写在本地文件output.html中,用firefox打开后是如下效果
因为这个系统编码的问题导致写入output.html中的内容是乱码,对比一下正常登陆的页面,可以看出是登陆成功了。
扩展:优化后可以使用cookie进行登陆,参考文章 地址