selenium中文文档_基于selenium的大麦网演唱会抢票程序

14dbce3906f50adc2f1de9483315c900.png

自从我在知乎分享了代码后,很多人关注了我的代码,自己也很荣幸,哈哈。但是好多人运行我的代码却出现了这样那样的问题,我刚开始也很纳闷,明明自己当初试了好几个演唱会都可以,为什么现在有这么多问题,上段时间自己正好有事自己也没太关注这个,所以我也只是站在原来研究的基础上进行回答,很多回答可能并没有点到关键上。最近正好有人QQ找我,我好好看了下,发现原来是大麦网的页面源码变了,变了很多很多,所以我原来的代码差不多失效大半了。我的方法太过于依赖页面源码的元素ID、xpath、class_name等等标签,所以应付不了这种变化。em,更新代码这件事,我最近先放放。不过大致思路是对的,大家在我的代码基础上修改下又是可以用的啦~

完整代码

大麦网上,像林俊杰这类歌星的演唱会的门票,往往时间一到就瞬间售完,网速慢了或者手慢了都只能对着屏幕叹息了。所以有时候你愿意花这钱也不一定买得到看的机会。但是其实这个问题并不难解决,手速慢?那可以让代码模拟操作。网速慢?那可以把程序放到阿里服务器上运行。而这其中的关键就是编写一个抢票程序!

要说抢票,网上关于12306的抢票程序多如繁星,但是关于大麦网的还真不多,但是核心要义都是一样的:模拟。其实这种程序一定程度上类似于爬虫,所以马上可以想到Python的urllib、BeautifulSoup、selenium、splinter等模块。最初为了方便,偷懒使用了splinter,封装得相当简单,但是功能不多,文档不全,网上资料少,写到后来,感觉主用这个模块解决不了自动登录问题,所以放弃转成了selenium。接下来,我将从账号登录、选择演唱会、购票、确认订单四个方面依次讲解思路。

1.账号登录

既然是抢票,我希望给定演唱会信息后一运行程序就能够马上进行,不需要其他的人工干预。这就要求我们的账号能够再抢票前自动登录绑定。其实要实现自动登录,由两种方式:①Cookie ②模拟登录。使用Cookie(原理:如果服务器端的$_COOKIE函数中记录了你的Cookie,那就可以直接调用登录,如果没有就需要人工登录了,登录了之后,二次访问界面就能把自己的Cookie保存到$_COOKIE函数)这种方式其实很方便,保存在本地,要用了调用一下,相当于带了一块出入皇宫的令牌,不用每次进入都验身啥的。但是Cookie涉及过期问题,同时是存在较大安全隐患。所以我决定玩玩另一个方式——模拟登录。

大麦网的登录界面如下图:

91a18fe62b5360f64aa3cf6996af1d6b.png

我们需要做的就是填充账号密码,填完了之后点击登录,其实人工登录到这里就完成了,但是用代码填充完内容后点击登录,惊喜就出现了,一个滑块突然出现在按钮上方,并红字提示需要将滑块滑到最右边才能点击登录。所以接下来我们除了要完成内容填充、按钮点击外,还要完成滑块的滑动。(我试过模拟人工填写信息来躲避这个滑块,但是奈何骗不过去,只好直面问题了)

说实话,因为经验不足,内容填充花了我好几个小时,原因就是这个登录框其实是一个网页,封装在iframe标签中,作为外部网页的子界面,不管我用哪个工具包,用id、class、xpath等哪个方式,都无法定位到账号框和密码框。当我注意到iframe这个坑,才搞明白要用下面这句话来定位到子页面。

self.driver.switch_to_frame('alibaba-login-box')#里面这个是iframe的id

接下来就简单了,

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值