自动签到脚本

从来没有接触过Python,昨天为了实现自动签到,在c74的带领下,找到一个人人的自动签到脚本,于是照葫芦画瓢,改成班级网站的自动签到。

人人:

import urllib.request

class renren:

    def __init__(self):
        self.operate=''
        try:
            self.opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor())
            urllib.request.install_opener(self.opener)
        except Exception as e:
            print(str(e))
        
    def login(self,email,pwd):
        print('login.....')
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        headers = { 'User-Agent' : user_agent}
        params={'domain':'renren.com','origURL':'http://www.renren.com/indexcon','email':email,'password':pwd}
        params=urllib.parse.urlencode(params)
        params=params.encode('ISO-8859-1')
        req=urllib.request.Request('http://www.renren.com/PLogin.do',params,headers)
        self.operate=self.opener.open(req)
        print(self.operate.geturl())#这里可以根据返回的url判断是否登录成功
   


email=''#登录邮箱
pwd=''#密码

rr=renren()
data=rr.login(email,pwd)
View Code

 

模拟报文,可以用chrome去查看原来的报文长什么样。在登陆的时候看看发送了什么东西给服务器,一般是一个POST报文或GET报文。

import urllib.request
import urllib.parse
import re
class renren:

    def __init__(self):
        self.operate=''
        try:
            self.opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor())
            urllib.request.install_opener(self.opener)
        except Exception as e:
            print(str(e))
        
    def login(self,login,username,passward):
        print('login.....')
        user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22'
        headers = { 'User-Agent' : user_agent}
        params={'login':login,'username':username,'password':password}
        params=urllib.parse.urlencode(params)
        params=params.encode('utf8')
        req=urllib.request.Request('http://sysucs.org/login.php',params,headers)
        self.operate=self.opener.open(req)
        print(self.operate.geturl())#这里可以根据返回的url判断是否登录成功
        
        while True:
            fp = urllib.request.urlopen('http://sysucs.org/mission.php')
            mystr = fp.info()
            #mystr = mybytes.decode("utf8")
            print(mystr)
        
username=''#登录邮箱
password=''#密码
login = '0'

rr=renren()
data=rr.login(login,username,password)
View Code

 

后来觉得不妥,总是这样循环请求会增加服务器的负担,况且大班长已经加入了检测循环请求的功能,限制了每秒访问页面的次数。

所以想起计网中说的,报文。虽然在班级网站上屏蔽了时间,但是你模拟一个报文给服务器的时候,服务器就会返回一个响应报文,响应报文里面就会有服务器时间的啦。

然后呢,从服务器返回的相应报文中提取时间。查了下Python文档,从报文类型里面查找时间的字符串,再进行处理就可以得到服务器时间啦。

接着调用一个睡眠函数,让程序睡够一定的时间再去请求签到页面。这样就能实现定时脚本签到。

因为有网络延迟,所以签到时间会00:00:00-00:00:01秒之间,网络太差的话还可能超过1秒。

然后写成一个bat,再利用win7的定时计划功能,每天晚上差不多12点的时候,自动运行这个bat.

只要在12点前的1、2分钟电脑是开的并且是联网的,就能自动签到了。

 

import urllib.request
import urllib.parse
import time
import string
class renren:

    def __init__(self):
        self.operate=''
        try:
            self.opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor())
            urllib.request.install_opener(self.opener)
        except Exception as e:
            print(str(e))
        
    def login(self,login,username,passward):
        print('login.....')
        user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22'
        headers = { 'User-Agent' : user_agent}
        params={'login':login,'username':username,'password':password}
        params=urllib.parse.urlencode(params)
        params=params.encode('utf8')
        req=urllib.request.Request('http://www.sysucs.org/login.php',params,headers)
        self.operate=self.opener.open(req)
        print(self.operate.geturl())#这里可以根据返回的url判断是否登录成功
        
        #while True:
        fp = urllib.request.urlopen('http://www.sysucs.org/index.php')#return http.client.HTTPResponse
        mystr = fp.info()
        date = mystr.get("Date")
        index = date.find("2013 ")
        times = date[index+5:index+13]
        print(times)
        mins = times[3:5]
        secs = times[6:8]
        count = 60-int(secs)+(59-int(mins))*60
        print(count)
        time.sleep(count)
        fp2 = urllib.request.urlopen('http://www.sysucs.org/mission.php')#return http.client.HTTPResponse
        print("End")
username=''#登录邮箱
password=''#密码
login = '0'

rr=renren()
data=rr.login(login,username,password)
View Code

 

其实要是课内的东西能找到实践的平台,而不仅仅停留在考试上,那么计算机系出来的学生一定牛逼轰轰。

可惜绝大多数知识总是停留在考试理论层面。说实话,从小到大,已经厌倦了。

书扔掉过2天你就什么都不会了。

posted @ 2013-06-04 00:20  Norcy  阅读(12150)  评论(4编辑  收藏  举报