抢票软件开发(三) 其余功能

本节将自主选座和添加邮寄地址和购票人信息两个部分的功能划到一起,因为这两部分的内容极为相似,其核心的做法都是对网站前端的类class,按钮button,标签div进行监控,当检测到对应的内容时,进行如click等操作。

这里以对选择购票人为例,

因为这里有一个常见的按钮监控不到的问题,

这里分析原因,其一是大麦网本身防止用户使用软件进行抢票,过快的操作将被禁止,其二是大麦网本身对标签的日常更新,导致很多抢票软件需要继续开发才能继续使用。

解决方案如下:

1.更新标签

(1)按F12,点击红标按钮,对于鼠标接触到的所有前端信息,控制台都将转到其标签下

(2)找到对应的标签并进行前端语言转化

 可以看到标签1对应的checkbox目前处于false状态,也可以看到观演人的标签是处于w1200这个类下的,同时也在confirmOrder_1这个标签下,这里采用confirmOrder_1作为基检测标签,对应到input按钮的逻辑为:

div(confirmOrder_1)/div[2]/div[2]/div[1]/div[1]/label/span/input

2.进行不断刷新的抢票机制

由于网络问题有时候检测不到checkbox的加载,这里采用的方案是一直监听aria-checked的状态,如果一直为false,那么一直进行选择,即

 while(stat.get_attribute('aria-checked') == 'false'):
                    time.sleep(0.5)
                    stat = self.driver.find_elements_by_xpath(
                        '//div[@id="confirmOrder_1"]/div[2]/div[2]/div[1]/div[1]/label/span/input')[
                        0]
                    self.driver.find_elements_by_xpath(
                            '//div[@id="confirmOrder_1"]/div[2]/div[2]/div[1]/div[1]/label/span/input')[
                            0].click()
                    print(stat.get_attribute('aria-checked'))

总体代码如下:

​
    def enter_concert(self):
        print('###打开浏览器,进入大麦网###')
        self.driver = webdriver.Chrome()
        self.login()
        self.driver.refresh()
        self.status = 2
        print("###登录成功###")

    def choose_ticket(self):
        if self.status == 2:
            self.num = 1

            print("=" * 30)
            print("###开始进行日期及票价选择###")
            while self.driver.title.find('确认订单') == -1:
                buybutton = self.driver.find_element_by_class_name('buybtn').text
                if buybutton == "即将开抢":
                    self.status = 2
                    self.driver.get(target_url)
                    print('###抢票未开始,刷新等待开始###')
                    continue

                elif buybutton == "立即预定":
                    self.driver.find_element_by_class_name('buybtn').click()
                    self.status = 3
                    self.num = 1

                elif buybutton == "立即购买":
                    self.driver.find_element_by_class_name('buybtn').click()
                    self.status = 4

                elif buybutton == "选座购买":
                    self.driver.find_element_by_class_name('buybtn').click()
                    self.status = 5

                elif buybutton == "提交缺货登记":
                    print('###抢票失败,请手动提交缺货登记###')
                    break

                title = self.driver.title
                if title == "确认订单":
                    self.check_order()

                elif self.status == 5:
                    print("###请自行选择位置和票价###")
                    break

    def check_order(self):
        if self.status in [3, 4]:
            if(ticket_number == '1'):
                stat = self.driver.find_elements_by_xpath(
                            '//div[@id="confirmOrder_1"]/div[2]/div[2]/div[1]/div[1]/label/span/input')[
                            0]
                while(stat.get_attribute('aria-checked') == 'false'):
                    time.sleep(0.5)
                    stat = self.driver.find_elements_by_xpath(
                        '//div[@id="confirmOrder_1"]/div[2]/div[2]/div[1]/div[1]/label/span/input')[
                        0]
                    self.driver.find_elements_by_xpath(
                            '//div[@id="confirmOrder_1"]/div[2]/div[2]/div[1]/div[1]/label/span/input')[
                            0].click()
                    print(stat.get_attribute('aria-checked'))

            print('###不选择订单优惠###')
            print('###请在付款完成后下载大麦APP进入订单详情页申请开具###')

            time.sleep(1)
            self.driver.find_elements_by_xpath('//div[@class = "w1200"]//div[2]//div//div[9]//button[1]')[0].click()

    def finish(self):
        self.driver.quit()

​

欢迎评论文章,给予宝贵建议,工程提供在github下载学习,请关注作者,共同学习交流。

github工程:https://github.com/sinxuy/Damai

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值