zoukankan      html  css  js  c++  java
  • Python3.x:抢票

    Python3.x:抢票

    一个妹子叫我帮她买动车票,结果竟然没买到票;好吧,不好意思说买不到票,写个抢票程序来完成吧;

    1,Chromediver安装:

    因为需要chrome支持页面测试,所以需要安装chromedriver。安装过程很简单(实际上不需要安装),注意下版本,有些低版本是不支持高版本的chrome的。镜像链接:http://npm.taobao.org/mirrors/chromedriver 。直接把chromedriver.exe扔在在C/windows/system32/文件夹下的,这样就不需要配置环境变量了。

    注意:chromedriver要跟chrome匹配;

    2,Splinter模块安装:

    Splinter是一个自动化测试网络应用的Python库。有了Splinter,就可以将打开浏览器、输入URL、填写表单、点击按钮等全部操作自动化。

    通过pip install splinter来安装。

    3,自动抢票,就是把每个操作步骤用代码实现;代码如下:

    #python3.x
    
    from splinter.browser import Browser
    from time import sleep
    # traceback模块被用来跟踪异常返回信息
    import traceback
    # 设定用户名、密码
    username = u"用户名"
    passwd = u"密码"
    # 起始站点和乘车时间的cookies值要去找;
    # 方法:先登录一下12306,输入地点日期什么的查询一下,然后在chrome浏览器中按F12,出现如下页面,在Application选项里找到相应的值。
    # 表格中的cookie值:
    #_jc_save_fromeStation的值为出发地
    #_jc_save_toSatation的值为目的地
    #_jc_save_fromDate 出发日期
    #_jc_save_toDate返程日期
    # 实例中用的是:福州 到 厦门北 2018-01-13
    from_station = u"%u798F%u5DDE%2CFZS"
    to_station = u"%u53A6%u95E8%u5317%2CXKS"
    # 时间格式2018-01-25
    from_date = u"2018-01-13"
    # 车次,选择第几趟,0则从上之下依次点击
    order = 0
    # 设定乘客姓名
    ticketer = 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():
        #点击当前页面的"登录"
        bwr.find_by_text(u"登录").click()
        sleep(3)
        #fill填充搜索框的内容,username。name=loginUserDTO.user_name的元素。
        bwr.fill("loginUserDTO.user_name", username)
        sleep(1)
        bwr.fill("userDTO.password", passwd)
        sleep(1)
        print(u"等待验证码,自行输入...")
        #登录手动输入验证码,并登录系统
        while True:
            #判断当前的url是否已经进入系统
            if bwr.url != initmy_url:
                sleep(1)
            else:
                break
    # 购票
    def getTickt():
        global bwr
        # 使用splinter打开chrome浏览器
        bwr=Browser(driver_name="chrome")
        # splinter打开浏览器(返回购票页面)
        bwr.visit(ticket_url)
        while bwr.is_text_present(u"登录"):
            sleep(1)
            login()
            #判断是否已经进入系统
            if bwr.url == initmy_url:
                break
        try:
            print(u"购票页面...")
            # splinter打开浏览器(跳回购票页面)
            bwr.visit(ticket_url)
            # 加载查询信息
            bwr.cookies.add({"_jc_save_fromStation": from_station})
            bwr.cookies.add({"_jc_save_toStation": to_station})
            bwr.cookies.add({"_jc_save_fromDate": from_date})
            bwr.reload()
            sleep(2)
            count=0
            # 循环点击预订
            if order != 0:
                while bwr.url == ticket_url:
                    bwr.find_by_text(u"查询").click()
                    count += 1
                    print(u"循环点击查询... 第 %s 次" % count)
                    sleep(1)
                    try:
                        bwr.find_by_text(u"预订")[order - 1].click()
                    except:
                        print(u"还没开始预订")
                        continue
            else:
                while bwr.url == ticket_url:
                     bwr.find_by_text(u"查询").click()
                     count += 1
                     print(u"循环点击查询... 第 %s 次" % count)
                     sleep(1)
                     try:
                         for i in bwr.find_by_text(u"预订"):
                             i.click()
                             sleep(1)
                     except:
                         print(u"还没开始预订")
                         continue
            sleep(1)
            # 可以通过修改sleep的参数来调整延时, 但延时不要太低, 防止被12306网站认为是刷票屏蔽掉.
            bwr.find_by_text(ticketer)[0].click()
            sleep(1)
            bwr.find_by_text(u"提交订单").click()
            sleep(1)
            #bwr.find_by_id(u"qr_submit_id").click()
            print(u"成功抢到一张宝贵的票")
        except Exception as e:
             print(traceback.print_exc())
    
    if __name__ == "__main__":
        getTickt()

    作者:整合侠
    链接:http://www.cnblogs.com/lizm166/p/8191305.html
    来源:博客园
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

     

  • 相关阅读:
    epplus
    http://www.cmake.org/
    patheditor2
    emgu cv
    OpenCV
    Tesseract
    Blendar基金会
    安装服务windows,installutil
    R 软件
    历史为什么选择C语言?事实证明:暮年的C语言,依旧宝刀未老!
  • 原文地址:https://www.cnblogs.com/lizm166/p/8191305.html
Copyright © 2011-2022 走看看