• python自动抢票


    # -*- coding: utf-8 -*-
    
    from splinter.browser import Browser
    from time import sleep
    import traceback
    
    #初始化信息
    
    # 用户名,密码
    username = u"用户名"
    passwd = u"密码"
    # cookies值得自己去找
    starts = u"杭州,HZH"
    ends = u"黄石,HSN"
    # 时间格式2016-03-22
    dtime = u"2016-03-22"
    # 车次,选择第几趟,0则从上之下依次点击
    order = 0
    ###乘客名,如果是自己,则上面有个链接是自己的,会跳转到个人中心,用index[1]
    #如果乘客不是自己,则用index[0]
    pa = u"名字"
    
    """网址"""
    ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init"
    login_url = "https://kyfw.12306.cn/otn/login/init"
    initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"
    
    
    def login():
        #点击登录,从购票页面调到了登录页面
        b.find_by_text(u"登录").click()
        sleep(3)
        #给name为loginUserDTO.user_name附上用户名
        #也可以用Id查找的方法b.find_by_id('username').fill(username)
        b.fill("loginUserDTO.user_name", username)
        sleep(1)
        #给name为userDTO.password值
        b.fill("userDTO.password", passwd)
        sleep(1)
        #验证码必须手动输入
        print u"等待验证码,自行输入..."
    
        #检测页面是否跳转(用户是否输入了验证码并且提交)
        while True:
            if b.url != initmy_url:
                sleep(1)
            else:
                break
    
    def huoche():
        global b
        b = Browser(driver_name="chrome")
        #访问12306
        b.visit(ticket_url)
    
        #查找带登录的字符串,u是避免中文报错
        while b.is_text_present(u"登录"):
            sleep(1)
            #如果存在调用登录方法
            login()
            if b.url == initmy_url:
                break
    
            #当执行完login方法后,登录成功,继续向下执行
        try:
            print u"购票页面..."
            # 跳回购票页面
            b.visit(ticket_url)
    
            # 加载查询信息
            b.cookies.add({"_jc_save_fromStation": starts})
            b.cookies.add({"_jc_save_toStation": ends})
            b.cookies.add({"_jc_save_fromDate": dtime})
            b.reload()
    
            sleep(2)
    
            count = 0
            # 循环点击预订
            #order=0则从第一班车开始全部依次预订
            if order != 0:
                #如果页面没有跳转到,说明没有抢到票,继续抢票
                while b.url == ticket_url:
                    #点击查询进行刷新
                    b.find_by_text(u"查询").click()
                    count +=1
                    print u"循环点击查询... 第 %s 次" % count
                    sleep(1)
                    try:
                        #点击预订的那班车
                        b.find_by_text(u"预订")[order - 1].click()
                    except:
                        print u"还没开始预订"
                        continue
            else:
                while b.url == ticket_url:
                    b.find_by_text(u"查询").click()
                    count += 1
                    print u"循环点击查询... 第 %s 次" % count
                    sleep(1)
                    try:
                        #从第一个开始依次预订
                        for i in b.find_by_text(u"预订"):
                            i.click()
                    except:
                        print u"还没开始预订"
                        continue
            sleep(1)
            #若循环结束了,则选择联系人
            b.find_by_text(pa)[0].click()
            print  u"能做的都做了.....不再对浏览器进行任何操作"
        except Exception as e:
            print(traceback.print_exc())
    
    if __name__ == "__main__":
        huoche()
    
  • 相关阅读:
    Android 5.0新特性了解(一)----TabLayout
    Kafka生产者各种启动参数说明
    Kafka基础知识
    ONS发布订阅消息
    Spring异步事件
    Java动态代理机制
    Java线程间怎么实现同步
    技术架构实践三要点
    Distributed transactions in Spring, with and without XA
    Spring 中常用注解原理剖析
  • 原文地址:https://www.cnblogs.com/anxiaoyu/p/6551250.html
Copyright © 2020-2023  润新知