自动买票工具 python-splinter

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

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

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

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

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

from splinter.browser import Browser
from time import sleep

username = ""
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 b
	b = 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:
			break

	try:
		
		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()



展开阅读全文

没有更多推荐了,返回首页