模拟登陆 Python

489 查看

模拟登陆 Python

from my wp blog

OOP老师有个网站,用于发布课件和布置提交作业,截止后作业都放在网上供学生下载

我浙大牛不少,把程序抓出来研究一下源码

模拟登陆

  • 关于网站
    • 木有验证码
      • 无需输入
      • 无需识别
    • 下载文件与绝对url无关,需要先访问一个页面,然后才能下载
      • 可能是headers的refer
    • 学生代码格式不统一
      • .cpp
      • .zip
      • .rar
      • .tar.gz

引入几个库,伪造表单数据

import urllib
import urllib2
import cookielib

auth_url = 'http://fm.zju.edu.cn/login.php'
data = {
    'user' : setting.user,
    'passwd' : setting.passwd,
}
postData = urllib.urlencode(data) #把数据编码为url格式

cookie管理

cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

伪造请求头

headers = {
    'Host' : setting.host,
    'Referer' : setting.referer,
}
req = urllib2.Request(auth_url, postData, headers)
req.add_header('User-Agent', setting.user_agent) #ua加入更健康
result = opener.open(req) #响应头和内容

查看result数据,发现已经登陆

先访问一个页面,然后在这个页面中下载代码文件

assign_url = 'http://fm.zju.edu.cn/showProblem.php?cid=**&pid=**'
result = opener.open(assign_url)
file_url = 'http://fm.zju.edu.cn/dls.php?cid=**&id='
for id in range(0, 150):
    result = opener.open(file_url+str(id))

这个时候代码文件已经下载,所需要做的是给一个文件名

在响应头里面可以找到一些东西,用正则可以抓出文件名,然后文件写入保存

import re
filenameRe = re.compile(r'^.*filename=(.+)$')
...
...
    filename = '100/' + str(id) + '_'+ filename
    outfile = open(filename, 'wb')
    outfile.write(result.read())
    outfile.close()

2018 - 知识虫 - 我的知识库 渝ICP备16002641号-2

渝公网安备 50010702501581号