逢年过节 12306 的票总是要靠抢,前几天小编就在抢周一去上海的票,实在是抢不到呀,就撸了一个自动抢票的脚本。
抢票的思路就是使用 selenium 模拟用户登录 12306 网站购票行为,登录后抓取 12306 网站火车票数据并自动购票。
准备工作
首先需要做一些准备工作,安装一些第三方库类和下载 chromedriver.exe 文件:
- 下载和 Chrome 浏览器相同版本的 chromedriver.exe 文件
- pip install selenium
- 超级鹰打码,识别图片验证码
用户名和密码
用 https://kyfw.12306.cn/otn/resources/login.html
做为起始登录页。网页的默认登录就是扫码,我们需要账号登录网站。这里用 selenium 模拟点击账号登录按钮。
账号登录的流程就是输入用户名和密码然后调用超级鹰 API 获取图片验证的坐标后,点击登录按钮。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class Ticket(object):
def __init__(self, username, password):
self.username = username
self.password = password
self.login_url = 'https://kyfw.12306.cn/otn/resources/login.html'
def findElement(self, type, id):
# 查找元素
return EC.visibility_of_element_located((type, id))
def login(self):