
随着网络购票的普及,节假日或热门线路的火车票往往一票难求。为了提高抢票效率,我们可以利用Python编写一个自动抢票脚本。本文将介绍如何使用Python 3.6和splinter库来实现这一功能。
确保你的系统中已安装Python 3.6或更高版本。你可以从Python官网下载并安装。
splinter是一个用于自动化浏览器操作的Python库,它支持多种浏览器。我们可以通过pip安装splinter及其依赖项:
pip install splinter根据你选择的浏览器(如Chrome、Firefox等),需要安装相应的WebDriver。例如,对于Chrome,你需要下载ChromeDriver,并将其路径添加到系统的PATH环境变量中。
from splinter import Browser
import time# 使用Chrome浏览器
browser = Browser('chrome')def login(username, password):
# 打开12306登录页面
browser.visit('https://kyfw.12306.cn/otn/resources/login.html')
# 填写用户名和密码
browser.find_by_id('J-userName').fill(username)
browser.find_by_id('J-password').fill(password)
# 点击登录按钮
browser.find_by_id('J-login').click()
# 等待用户手动完成验证码输入
input("请在浏览器中完成验证码输入后按回车键继续...")def select_trip(departure, arrival, date):
# 跳转到购票页面
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')
# 选择出发地和目的地
browser.find_by_id('fromStationText').fill(departure)
browser.find_by_id('toStationText').fill(arrival)
# 选择日期
browser.find_by_id('train_date').fill(date)
# 查询车次
browser.find_by_id('query_ticket').click()def submit_order():
# 等待查询结果加载
time.sleep(5)
# 选择第一个可预订的车次
if browser.is_element_present_by_css('.no-br'):
browser.find_by_css('.no-br')[0].click()
# 确认乘客信息
browser.find_by_id('normalPassenger_0').click()
# 提交订单
browser.find_by_id('submitOrder_id').click()
# 确认订单
time.sleep(5)
browser.find_by_id('qr_submit_id').click()def main():
username = 'your_username'
password = 'your_password'
departure = '北京'
arrival = '上海'
date = '2023-10-01'
login(username, password)
select_trip(departure, arrival, date)
submit_order()
if __name__ == '__main__':
main()虽然该脚本还存在一些限制,但可以作为一个基础框架进行扩展和完善。希望本文对你有所帮助!
创建一个自动抢火车票的脚本需要考虑多个方面,包括登录、选择车次、填写乘客信息等。下面是一个基于Python 3.6和Splinter库的简化示例。请注意,这仅用于教育目的,实际使用时应遵守相关法律法规。
首先,确保安装了必要的库:
pip install splinterfrom splinter import Browser
import time
# 配置浏览器驱动(这里以Chrome为例)
executable_path = {'executable_path': '/path/to/chromedriver'}
# 初始化浏览器
browser = Browser('chrome', **executable_path)
def login(url, username, password):
# 打开12306登录页面
browser.visit(url)
# 填写用户名和密码
browser.fill('loginUserDTO.user_name', username)
browser.fill('userDTO.password', password)
# 点击登录按钮
browser.find_by_id('loginSub').click()
# 等待页面加载完成
time.sleep(5)
def search_ticket(departure, arrival, date):
# 跳转到购票页面
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')
# 填写出发地和目的地
browser.fill('train_start_station', departure)
browser.fill('train_arrive_station', arrival)
# 选择日期
browser.execute_script(f"document.getElementById('train_date').value='{date}'")
# 查询车票
browser.find_by_id('query_ticket').click()
# 等待查询结果加载
time.sleep(5)
def select_ticket_and_passenger():
# 选择第一个有余票的车次
tickets = browser.find_by_css('.ticket-list tbody tr')
for ticket in tickets:
if '有' in ticket.text:
ticket.find_by_css('.no-br')[0].click()
break
# 选择乘客
browser.find_by_text('常用联系人').click()
browser.find_by_text('张三').click()
# 提交订单
browser.find_by_id('submitOrder_id').click()
# 确认订单
browser.find_by_id('qr_submit_id').click()
def main():
url = 'https://kyfw.12306.cn/otn/resources/login.html'
username = 'your_username'
password = 'your_password'
departure = '北京'
arrival = '上海'
date = '2023-10-01'
try:
login(url, username, password)
search_ticket(departure, arrival, date)
select_ticket_and_passenger()
finally:
# 关闭浏览器
browser.quit()
if __name__ == '__main__':
main()希望这个示例对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。实现自动抢火车票的脚本可以利用Python的splinter库来模拟浏览器操作,完成登录、选择车次、填写乘客信息等步骤。以下是一个简单的示例,展示如何使用Python 3.6和splinter库来构建一个自动抢票的脚本。请注意,这个脚本仅用于学习目的,实际使用时需要遵守相关法律法规。
首先,你需要安装splinter和geckodriver(Firefox的WebDriver):
pip install splinter你还需要下载对应版本的geckodriver并将其路径添加到系统环境变量中。
from splinter import Browser
import time
# 配置浏览器
browser = Browser('firefox')
def login(username, password):
# 打开12306网站
browser.visit('https://www.12306.cn/index/otn/resources/login/init')
# 切换到账号登录
browser.find_by_text('账号登录').click()
# 输入用户名和密码
browser.fill('loginUserDTO.user_name', username)
browser.fill('userPassword', password)
# 点击登录按钮
browser.find_by_id('loginSub').click()
# 等待页面加载完成
time.sleep(5)
def search_ticket(departure, arrival, date):
# 跳转到购票页面
browser.visit('https://www.12306.cn/index/otn/leftTicket/init')
# 填写出发地、目的地和日期
browser.fill('train_start_station', departure)
browser.fill('train_arrive_station', arrival)
browser.fill('train_date', date)
# 点击查询按钮
browser.find_by_id('query_ticket').click()
# 等待查询结果加载
time.sleep(5)
def select_ticket():
# 选择第一个有余票的车次
tickets = browser.find_by_css('.ticket-list .ticket-item')
for ticket in tickets:
if '无' not in ticket.text:
ticket.click()
break
def confirm_order(passenger_name):
# 选择乘客
browser.find_by_text(passenger_name).click()
# 点击提交订单
browser.find_by_id('submitOrder_id').click()
# 确认订单
browser.find_by_id('qr_submit_id').click()
if __name__ == '__main__':
# 用户名和密码
username = 'your_username'
password = 'your_password'
# 出发地、目的地和日期
departure = '北京'
arrival = '上海'
date = '2023-10-01'
# 乘客姓名
passenger_name = '张三'
# 登录
login(username, password)
# 查询车票
search_ticket(departure, arrival, date)
# 选择车次
select_ticket()
# 确认订单
confirm_order(passenger_name)
# 关闭浏览器
browser.quit()splinter的Browser类来配置浏览器实例。希望这个示例对你有所帮助!如果有任何问题或需要进一步的帮助,请随时告诉我。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。