自动签到脚本

从来没有接触过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天你就什么都不会了。

你可能感兴趣的:(脚本)