自动买票工具 python-splinter

来源:互联网 发布:oracle11g数据库迁移 编辑:程序博客网 时间:2024/05/17 03:42

今天又没买到回家的火车票......

我表示很闹心,最近正好在研究知乎助手的那个小爬虫,看到了splinter这个库,这个库主要运用于前端测试的小工具,但是也可以和爬虫结合起来进行一些信息抓取的工作.

其实原理很简单就是找到相应按钮的id然后调用点击函数,在你想填入文字的edit框中添加相应的内容就ok了,只不过不需要你手动去点,现在这个代码其实还可以优化,比如说可以将所有车次加入到一个字典中,之后你就直接输入车次就ok了,不用现在还得查车次的顺序和位置.

验证码这一块还是没有好的解决办法,也没有相应的开源库,只能手动验证或者链接打码兔的api都可以.

运行下方代码得手动输入一下账号和密码,还得登录12306找一下自己地点的cookies,方法很简单就是进入12306买票界面,输入完地点之后,找到cookies这个单词,点开之后里面会有_jc_save_开头的几个属性,记录一下就OK.

from splinter.browser import Browserfrom time import sleepusername = ""password = ""start = "%u5317%u4EAC%2CBJP"#北京end = "%u6C88%u9633%2CSYT"#沈阳time = "2016-01-23"order = 1#预订第一个车次,如果为0则预订离现在时间最近有票的车次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 qiangpiao():global bb = Browser()b.visit(ticket_url)while b.is_text_present(u"登录"):sleep(1)b.find_by_text(u"登录").click()sleep(3)b.fill("loginUserDTO.user_name",username)sleep(1)b.fill("userDTO.password",password)sleep(1)print "等待验证码,自行输入..."sleep(10)if b.url == initmy_url:breaktry:b.visit(ticket_url)b.cookies.add({"_jc_save_fromDate":time})b.cookies.add({"_jc_save_fromStation":start})b.cookies.add({"_jc_save_toStation":end})b.reload()b.find_by_text(u"查询").click()if order != 0:while b.url == ticket_url:b.find_by_text(u"预订")[order-1].click()b.find_by_text(u"邓京东").click()else:while b.url == ticket_url:for i in b.find_by_text(u"预订"):i.click()b.find_by_text(u"邓京东").click()print "等待验证码,自行输入..."except Exception as e:print str(e)if __name__ == "__main__":qiangpiao()



0 0
原创粉丝点击