不知不觉,一年一度的春运抢票大幕已经拉开,想快速抢到回家的车票吗?作为程序员,这些技术手段,你一定要知道。
为了让大家更快捷更便利的抢火车票,各种各样的抢票软件应需而生,这类软件大部分都是付费抢票的机制。
作为程序员,如何用技术手段抢到回家的票?来看看用 Python 写的抢票脚本。
手把手教你用 Python 抢票回家过年
环境介绍
windows 8.1
python3.6.1
firefox插件 geckodriver.exe
操作步骤
引入要的模块
from selenium import webdriver #控制浏览器
from selenium.webdriver.common.keys import Keys #用于给元素赋值
import time #时间模块
from selenium.webdriver.support.select import Select #控制下拉框模块
from selenium.webdriver.common.by import By #寻找元素模块
from selenium.webdriver.support.ui import WebDriverWait #“显示等待”模块
from selenium.webdriver.support import expected_conditions as EC #等待条件模块
登陆模块
首先需要选择使用的浏览器,此处以 firefox 为例,下载:geckodriver.exe 。
提到的 stations.txt 可以直接看这个:
车站信息:
将 geckodriver.exe 放到 python.exe 同级目录下即可(如果有报错的情况下,放一个该文件到与 firefox.exe 同级目录下,并添加环境变量)
#可以用input,也可以直接放入到后面的用户名、密码输入框中
#可以利用标准输入进行批量的操作,此处以个人抢票操作为例
# username = str(input('请输入你的用户名:'))
# password = str(input('请输入你的密码:')) #这两行可以暂时忽略
browser = webdriver.Firefox() #驱动firefox浏览器
browser.get("https://kyfw.12306.cn/otn/login/init") #启动浏览器后进入该链接下
browser.find_element_by_id('username').clear()
browser.find_element_by_id('username').send_keys(‘xxxxx’) #xxxxx更换为用户名
browser.find_element_by_id('password').send_keys(‘xxxxx’) #xxxxx更换为密码
time.sleep(10) #此时验证码自行点击,该处设置10秒延迟,可以自己设置
try:
browser.find_element_by_id('loginSub').click() #点击登陆操作,该id为登陆按钮
#或者 browser.find_element_by_link_text('登陆').click() #标签显示的名称
except:
browser.find_element_by_class_name('touclick-bgimg touclick-reload touclick-reload-normal').click() #try中验证码输入点错了会在此处刷新一次
time.sleep(20) #第二次输入