用Python 实现刷钻网上抢任务,并实现一个简单的限制使用时间的功能

# coding=utf-8
'''
Created on 2011-7-1

@author: Yunanw
'''

import cookielib, urllib2, urllib
import time
import lxml.html as H 
import lxml.etree
import ConfigParser
from socket import *
import struct

#===============================================================================
#
 此处必改
#
===============================================================================
BuildTime = time.strptime('2011-07-08'"%Y-%m-%d")
Payed 
= False


#===============================================================================
#
 常量
#
===============================================================================
CurrentTime = time.strptime('1970-07-08'"%Y-%m-%d")
Password 
= ""
XiaoHao 
= ""
OpCode 
= ""
TaskPage 
= "http://www.shuazuanla.com/taobao.asp?flag=0"
TimeServer 
= "time.apple.com"


# 初始化UrlLib模块
cookiejar = cookielib.CookieJar()
proxy 
= urllib2.ProxyHandler({'http''127.0.0.1:8888'})
urlOpener 
= urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(urlOpener)

def Log(msg):
    
print msg
        
def Post(url, Data):
    request 
= urllib2.Request(url, urllib.urlencode(Data))
    page 
= urlOpener.open(request)
    
return page.read()
    
def Get(url):
    request 
= urllib2.Request(url)
    page 
= urlOpener.open(request)
    
return page.read()

def InitConfig():
    config 
= ConfigParser.ConfigParser()
    config.read(
"config.ini"
    
##
    global Password 
    Password 
= config.get("userdata""password"
    
global XiaoHao
    XiaoHao 
= config.get("userdata""xiaohao")
    
global OpCode
    OpCode 
= config.get("userdata""opcode")
    
global TaskPage
    TaskPage 
= config.get("userdata""taskpage")
    
def Login():
    
##登陆URL
    loginUrl = "http://www.shuazuanla.com/user_log.asp"
    usrAndPwd 
= {"UserName":"你的用户名""PassWord":Password}
    
    ret 
= Post(loginUrl, usrAndPwd)
    ret 
= ret.decode('gbk').encode('utf-8')
    
if ret.find('用户名或密码错误'> -1:
        
print U'用户名或密码错误'
        
return False
    
else:
        
return True
        
    
def OpenTaskListPage():
    
return Get(TaskPage)
    
#return Get("http://www.shuazuanla.com/taobao.asp")
   
def AnlyseTaskListPage(taskListPage):
    
#开始分析
    doc = H.document_fromstring(taskListPage)
    trTaskList 
= doc.xpath("//table[@style='background:url(images/fenlei_right.jpg) no-repeat;']//table[last()]/tr[position()>1]")
    
    taskList 
= []
    
    
for trTask in trTaskList:
        tdTaskState 
= trTask.findtext('./td[last()]/a')
        
if tdTaskState == U'等待接手':
            taskList.append(trTask.findtext(
'./td[1]/a'))
            
    
return taskList

def ProcessTask(taskID):
    
print U"找到任务:" + taskID 
    
#ret = submitTask(taskID)
    #print ret.split('<script>')[2]

        
def ProcessTaskAsync(taskID):  
    
return ProcessTask(taskID)  

def submitTask(taskID):
    url 
= 'http://www.shuazuanla.com/showinfo.asp?action=sbuto&din=' + taskID
    postData 
= 'xiaohao=&xiaohao=&txiaohao_u842=' + XiaoHao + '&select=&opPassWord=' + OpCode + '&Submit=%C1%A2%BC%B4%BD%D3%CA%D6%C8%CE%CE%F1'
    request 
= urllib2.Request(url, postData)
    
#网站会校验Refrer
    request.add_unredirected_header("Referer"'http://www.shuazuanla.com/showinfo.asp?action=jie&din=' + taskID)
    page 
= urlOpener.open(request)
    
return page.read()

def GetNetTime():
    
    
if Payed:
        
return None
    
    time_server 
= (TimeServer, 123)
    TIME1970 
= 2208988800L
    
    client 
= socket(AF_INET, SOCK_DGRAM)
    
    data 
= '\x1b' + 47 * '\0'
    client.sendto(data, time_server)
    
    data, address 
= client.recvfrom(1024)
    
if data:
        t 
= struct.unpack('!12I', data)[10]
        
if t == 0:
            
raise U'取得时间出错'
        
        
global CurrentTime
        CurrentTime 
= time.localtime(t - TIME1970)

    
else:
        
raise U'与时间服务器通信失败'
    
def TimeJudge():
    
if Payed:
        
return True
    seconds 
= time.mktime(BuildTime) - time.mktime(CurrentTime)
    
print seconds
    
if seconds < 0:
        
raise U"试用已到期,请付款"

###################################################
#
 自动刷钻程序
#
#
##################################################  


GetNetTime()

#读配置
InitConfig()
#登陆
ret = Login()

while(ret): 
    taskListPage 
= OpenTaskListPage()
    TaskList 
= AnlyseTaskListPage(taskListPage)
    
if len(TaskList) == 0:
        
print U'未找到合适任务'
    
    
for taskid in TaskList:
        ProcessTaskAsync(taskid)
    
    TimeJudge()   
    time.sleep(
2)
    
posted on 2011-07-20 21:48  Yunanw  阅读(1052)  评论(0编辑  收藏  举报