Selenium 实战:自写 12306 刷票脚本

作者/分享人:灵动的艺术
向 Ta 提问
3年+Android系统Framework层定制化方案开发,3年+互联网消费金融产品架构经验,毕业于湖南大学软件工程专业,目前就职于上海麦广互娱文化传媒股份有限公司消费金融事业部,担任技术负责人。精通Java与Python。个人CSDN ElasticSearch专栏,https://blog.csdn.net/weixin_43430036/column/info/28872 欢迎围观

每逢过年就到了 12306 的抢票高峰期,作为一枚程序员,当然不能把时间和金钱浪费在刷票上啦。这里分享自写的 12306 刷票脚本,有兴趣的欢迎一起用技术解决生活难题。

本 Chat 主要贡献内容如下:

  1. Selenium 学习与实战;
  2. 自动化脚本的分析与实现;
  3. 利用 Python 协程加速我们的刷票检索速度。

本 Chat 仅作技术分享,给大家一种解决问题的方式,并非黄牛,不帮抢票,谢谢。

已有963人预订
预订达标
文章出炉
交流日期
     
18.12.25
18.12.28
01月07日 20:30
查看文章评论/提问
老张
给力,成功了,就是刷一断时间就换掉了,新开12306连验证码都没有刷出来。不知道是什么情况。
泰然
读取配置文件报错 unicodeDecodeError:gbk codec can.t decode byte 0x97
灵动的艺术: 保持所有文件格式为utf-8不变,不要改编码格式,可以使用Notepad++ 之类的软件设置文件编码格式; 或者修改代码为 with open('./config/ticket_12306_exact_mode_config.json','r', encoding='UTF-8') as f:
泰然: 真没改文件格式,就编辑了下用户名和密码,还有车站。用方法2可以解决,感谢
泰然
第69行报keyError '2018-12-26' 这个是写死的?
灵动的艺术: 抱歉,刚看到你的提问,日期不是写死的,文章我当天写了,个人疏忽,忘了改过来,抱歉抱歉,应该是train_date,我写死了,问题已修复,请重新拉一下代码
Seven。
采用扫描模式自动刷票,我配置文件设置优先级为"一等座","二等座",结果他只能针对一等座的票进行判断,一等座无票,二等座有票,就会判断无票,然后就一直再次发起查询
幻化彼岸: 自己改一下逻辑咯
往事如烟: 我的也是,你修改好了吗?
win
拉了代码,参考前面的问题,都解决了。程序可以执行到自动打开车票查询页面,但是出发地和目的地的值没有填充不成功。后面的步骤无法进行。虽然可以参考代码去解决,但是既然是一个收费的教程,希望可以有更高的质量。
Seven。: 请问如何填充?我遇到了以下问题 selenium.common.exceptions.WebDriverException: Message: unknown error: Element <a href="javascript:" id="query_ticket" class="btn92s" shape="rect">...</a> is not clickable at point (973, 153). Other element would receive the click: <div class="dhx_modal_cover" style="display: inline-block;"></div>
xia
No R interpreter defined: Many R related features like completion, code checking and help won't be available. You can set an interpreter under Preferences->Languages->R 还需要R语言?
Charlotte
Traceback (most recent call last): File "F:/PCWork/tutorial-master/selenium_12306_ticket_exact_mode.py", line 202, in <module> train_no = get_train_no(ticket_12306_config_dict['train_code'],ticket_12306_config_dict['travel_date'].replace('\'','')) File "F:/PCWork/tutorial-master/selenium_12306_ticket_exact_mode.py", line 69, in get_train_no for k in d[train_date][c]: KeyError: '2018-12-31' 我的这个报错是为什么,值没有传过去吗?
Charlotte
Traceback (most recent call last): File "F:/PCWork/tutorial-master/selenium_12306_ticket.py", line 223, in <module> driver.get('https://kyfw.12306.cn/otn/resources/login.html') File "C:\Users\asus.SYJC-20170111XA\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 333, in get self.execute(Command.GET, {'url': url}) File "C:\Users\asus.SYJC-20170111XA\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\asus.SYJC-20170111XA\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"55AB23EE489D546F8DCF807C09A9A855","isDefault":true,"type":"default"},"id":1,"name":"","origin":"://"} (Session info: chrome=71.0.3578.98) (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.3 x86_64) Process finished with exit code 1 求解!谢谢
面包包
一点都不行,能不能手把手教学
big water
写的很认真,佩服了
oh
操作系统Linux吗??
幻化彼岸: 这个无所谓啦,你丢树莓派跑和在任何一款win10pc跑都可以
futurewi
如何实现selenium 在Linux下部署,headless chrome,还有可以和docker结合吗?
晓恩
请问这是 还要安装 .cc 吗 [23760:24560:0107/195055.393:ERROR:install_util.cc(687)] Failed to read HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken: 系统找不到指定的文件。 (0x2)
幻化彼岸: 作者用的模拟操作的方式,这种路数和自动测试如出一辙。 所以你需要浏览器驱动, chrome的或者Firefox的,或者直接安装firefox开发板。 实例化driver时改一下就好
万帅
我还以为直接可以用,还要环境,我没有。。。
Jesse²º¹⁹
可以手动用来刷票,测试通过了。 2019年1月10日,mark一下。
幻化彼岸
还可以的,辛苦大佬
$?.sh
你好 主编请问下出发站和到达站编号是指的什么
你可能还喜欢
110 道 Python 面试笔试题超强汇总
嘉美伯爵
Redis 实战场景详解
驰骋
轻松搞定机器学习中的概率统计知识
Evan
从学生到职场,这位百万爬虫博主都经历了什么?
崔庆才丨静觅
架构师成长之路之服务治理漫谈
飞狐
打造高效「Mac 工具栈」,提高工作效率
易水寒
微信扫描登录
关注提示×
扫码关注公众号,获得 Chat 最新进展通知!