zoukankan      html  css  js  c++  java
  • 用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)
        
  • 相关阅读:
    【动态规划】01背包问题
    【Spring源码解读】bean标签中的属性(一)你可能还不够了解的 scope 属性
    【LeetCode】无重复字符串最长子串
    【LeetCode】两数之和
    LeetCode单排日记
    你不可不知的Java引用类型【总结篇】
    你不可不知的Java引用类型之——PhantomReference源码详解
    你不可不知的Java引用类型之——WeakReference源码详解
    你不可不知的Java引用类型之——SoftReference源码详解
    你不可不知的Java引用类型之——ReferenceQueue源码详解
  • 原文地址:https://www.cnblogs.com/listhome/p/2112120.html
Copyright © 2011-2022 走看看