抢票软件开发(二) 模拟登录

本抢票软件功能设计分为4个部分:

1.模拟登录

2.自主选座

3.添加邮寄地址和购票人信息

4.软件封装

 

这里以大麦网的抢票软件为例,网站登录提供三种方法(暂时不考虑通过第三方进行登录),短信登录由于涉及和手机端或者模拟手机端进行通信,不考虑,仅剩下密码登录和扫码登录两种方式,故初步思考实现模拟登录有三种方法。

1.每次登录时手动输入账号密码进行登录

2.软件自动输入账号密码,绕过进度条验证过程

3.软件自动通过储存cookie进行扫码登录

 

方案一:

在程序实现过程中,发现大麦网有防止刷票的机制,在刷票时如果多次进行刷新,就会让用户重新登录,这种情况是在刷票的同时不允许出现的,故方案一被抛弃。

 

方案二:

由于不清楚大麦网内部关于爬虫登录的进度条机制,且经过测试发现在selenium下进度条的筛选极为严格,甚至有时候人来拖动都没办法通过,考虑程序算法实现的较难验证的特性,抛弃。

 

方案三:

扫码登录是一种比较特殊的登录方式,不需要经过进度条验证,这样可以通过保存人的一次登录过程产生的cookie进行重复登录,是一种很好的方法。

 

源码如下:

    def set_cookie(self):
        self.driver.get(damai_url)
        print("###请点击登录###")
        while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1:
            sleep(1)
        print("###请扫码登录###")
        while self.driver.title == '大麦登录':
            sleep(1)
        print("###扫码成功###")
        pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))
        print("###Cookie保存成功###")
        self.driver.get(target_url)

    def get_cookie(self):
        try:
            cookies = pickle.load(open("cookies.pkl", "rb"))  
            for cookie in cookies:
                cookie_dict = {
                    'domain': '.damai.cn',
                    'name': cookie.get('name'),
                    'value': cookie.get('value'),
                    "expires": "",
                    'path': '/',
                    'httpOnly': False,
                    'HostOnly': False,
                    'Secure': False}
                self.driver.add_cookie(cookie_dict)
            print('###载入Cookie###')
        except Exception as e:
            print(e)

    def login(self):
        if self.login_method == 0:
            self.driver.get(login_url)
            print('###开始登录###')

        elif self.login_method == 1:
            if not os.path.exists('cookies.pkl'):
                self.set_cookie()
            else:
                self.driver.get(target_url)
                self.get_cookie()

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

需要注意的是,在追踪网站前端的标签时,其名称,标签名时经常更新的,可以通过F12在浏览器中查看对应的标签号进行程序逻辑的修改。

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值