首页 > 编程语言 >python自动化脚本:12306-火车票购票

python自动化脚本:12306-火车票购票

时间:2024-06-07 17:59:00浏览次数:28  
标签:python driver 购票 element click keys 12306 ID find

1.导包:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait

2.选择浏览器驱动:这里选择的是Chrome

driver=webdriver.Chrome()
# 12306查票的网址
driver.get('https://kyfw.12306.cn/otn/leftTicket/init')

网址打开长这样:

 

 设置等待,有三种方式,第一种是死等:time.sleep()。第二种是显示等待WebDriverWait,第三种是隐式等待:implicitly_wait。为什么要设置等待?因为当页面跳转的时候下个页面的数据海没有加载出来,容易导致我们下面的代码报错,我这里使用的是隐式等待,因为只用设置一次哈哈哈哈

driver.implicitly_wait(10)

 输入出发地,到达地,和出发时间

fromStationText=input('请输入出发地:')
driver.find_element(By.ID,'fromStationText').click()
driver.find_element(By.ID,'fromStationText').clear()
driver.find_element(By.ID,'fromStationText').send_keys(fromStationText)
driver.find_element(By.ID,'fromStationText').send_keys(Keys.ENTER)

# 输入到达地点
toStationText=input('请输入出发地:')
driver.find_element(By.ID,'toStationText').click()
driver.find_element(By.ID,'toStationText').clear()
driver.find_element(By.ID,'toStationText').send_keys(toStationText)
driver.find_element(By.ID,'toStationText').send_keys(Keys.ENTER)

# 输入日期
date=input('请输入出发时间:')
driver.find_element(By.ID,'train_date').click()
driver.find_element(By.ID,'train_date').clear()
driver.find_element(By.ID,'train_date').send_keys(date)
driver.find_element(By.ID,'train_date').send_keys(Keys.ENTER)

对应到操作页面是这样的: 记住一定要设置回车按钮!!!

 点击查询车票:

driver.find_element(By.ID,'query_ticket').click()

考虑到各位的经济实力,我这里设置的是二等座,当然可以调整,无非换一个id名字

driver.find_element(By.ID,'cc_seat_type_O_check').click()

点击预定,我这里用的是完整的Xpath,大家也可以使用其他方法

driver.find_element(By.XPATH,'/html/body/div[2]/div[7]/div[12]/table/tbody/tr[1]/td[12]/a').click()

登录12306

username='自己的电话号码'
pwd='自己的12306密码'


driver.find_element(By.ID,'J-userName').send_keys(username)

driver.find_element(By.ID,'J-password').send_keys(pwd)

driver.find_element(By.ID,'J-login').click()

 验证登录:执行到这里的时候需要填写12306发送给你手机号的验证码

sfz='自己的身份证后四位'
driver.find_element(By.ID,'id_card').send_keys(sfz)
driver.find_element(By.ID,'verification_code').click()
yanzma=input("输入验证码:")
driver.find_element(By.ID,'code').send_keys(yanzma)
driver.find_element(By.ID,'sureClick').click()

 选择乘车人信息,点击提交订单

driver.find_element(By.ID,'normalPassenger_0').click()
driver.find_element(By.ID,'submitOrder_id').click()

 

到这里就抢到票了,自己去支付一下就ok了!

完整代码:记得填写自己的手机号,密码,身份证后四位就可以使用了

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait

driver=webdriver.Chrome()

driver.get('https://kyfw.12306.cn/otn/leftTicket/init')
driver.implicitly_wait(10)

# 输入出发地
fromStationText=input('请输入出发地:')
driver.find_element(By.ID,'fromStationText').click()
driver.find_element(By.ID,'fromStationText').clear()
driver.find_element(By.ID,'fromStationText').send_keys(fromStationText)
driver.find_element(By.ID,'fromStationText').send_keys(Keys.ENTER)

# 输入到达地点
toStationText=input('请输入出发地:')
driver.find_element(By.ID,'toStationText').click()
driver.find_element(By.ID,'toStationText').clear()
driver.find_element(By.ID,'toStationText').send_keys(toStationText)
driver.find_element(By.ID,'toStationText').send_keys(Keys.ENTER)

# 输入日期
date=input('请输入出发时间:')
driver.find_element(By.ID,'train_date').click()
driver.find_element(By.ID,'train_date').clear()
driver.find_element(By.ID,'train_date').send_keys(date)
driver.find_element(By.ID,'train_date').send_keys(Keys.ENTER)

# 查询车票
driver.find_element(By.ID,'query_ticket').click()
# time.sleep(1)
# 二等座
driver.find_element(By.ID,'cc_seat_type_O_check').click()
# 预定车票
driver.find_element(By.XPATH,'/html/body/div[2]/div[7]/div[12]/table/tbody/tr[1]/td[12]/a').click()


username='自己的手机号'
pwd='登录密码'


driver.find_element(By.ID,'J-userName').send_keys(username)

driver.find_element(By.ID,'J-password').send_keys(pwd)

driver.find_element(By.ID,'J-login').click()

sfz='自己的身份证后四位'
driver.find_element(By.ID,'id_card').send_keys(sfz)
driver.find_element(By.ID,'verification_code').click()
yanzma=input("输入验证码:")
driver.find_element(By.ID,'code').send_keys(yanzma)
driver.find_element(By.ID,'sureClick').click()

driver.find_element(By.ID,'normalPassenger_0').click()
driver.find_element(By.ID,'submitOrder_id').click()

都看到这里了,点个赞呗!!!

标签:python,driver,购票,element,click,keys,12306,ID,find
From: https://blog.csdn.net/m0_73426548/article/details/139505920

相关文章

  • Python3 元组、列表、字典、集合小结
    前言本文主要对Python中的元组、列表、字典、集合进行小结,主要内容包括知识点回顾、异同点、使用场景。文章目录前言一、知识点回顾1、列表(List)2、元组(Tuple)3、字典(Dictionary)4.、集合(Set)二、异同点1、异构性2、可变性3、有序性4、可迭代性三、使用场景1、列表(List......
  • python 深浅拷贝
    浅拷贝copy函数就是浅拷贝copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝对拷贝的对象开辟新的内存空间进行存储,子对象不会开辟新的空间list1=[1,2,3]list2=['a',list1]list3=list2.copy()print(id(list1))print(id(list2))#三个id都不一样prin......
  • GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?
    Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。今天给小伙伴们带来的是图灵&京东认证的“Python编程入门三剑客”,先看《Python编程从入门到实践》,打好Python入......
  • GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
    当下是Python急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了Python代码应该遵循的编程风格,并解释了背后的原理和机制。入门Python语言相对简单,但写出优雅的代码并非易事。这份手册深入讲解了Python进阶知识的方方......
  • 开山之作!Python数据与算法分析手册,登顶GitHub!
    若把编写代码比作行军打仗,那么要想称霸沙场,不能仅靠手中的利刃,还需深谙兵法。Python是一把利刃,数据结构与算法则是兵法。只有熟读兵法,才能使利刃所向披靡。只有洞彻数据结构与算法,才能真正精通Python。今天给小伙伴们分享的这份手册,是用Python描述数据结构与算法的开山之作,......
  • Python 绘图
    折线图importmatplotlib.pyplotaspltimportmatplotlib.font_managerasfm#设置字体族:英文使用TimesNewRoman,中文使用SimSunplt.rcParams['font.family']=['TimesNewRoman','SimSun']#数据x=[1,2,3,4,5]y=[2,3,5,7,11]#......
  • Python爬虫-字体加密 ddddocr FontCreator
    目录应用场景解决思路1.下载字体文件2.分析3.代码实现版本1版本2应用场景在爬取网页数据时我们有时可能会遇到如下面的情况,价格数字在网页上能正常显示,但在控制面板查看时却是显示空白,我们通过requests等库爬取该页面后得到的数据也是无法显示出来。解决思路1.......
  • python获取多只股票价格信息的方法
    python代码如下:importefinanceasefimporttimefromdatetimeimportdatetimeimportcsvfreq=1defprocess_row(row):#在这里处理每一行数据print('股票:'+row[0],'日期:'+row[2],'现价:'+row[3],'最高:'+row[5],'最低:�......
  • 单个python文件代码的车牌检测系统 使用pyqt做界面进行车牌检测,可以保存结果到excel文
    融合了hyperlpr3和opencv来检测车牌通过图片检测车牌的系统,使用了pyqt和hyperlpr3结合来进行检测,可以保存检测的结果到excel文件 亲自测试修改代码,运行正常并且不依赖百度网络api,纯本地运行,融合了2个车牌检测模型,第一个模型使用opencv来模糊图像,然后进行边缘检测和......
  • Python自动化发送邮件如何实现?怎么配置?
    Python自动化发送邮件需要注意什么?邮件群发的技巧?无论是个人使用还是企业需求,电子邮件的发送都是必不可少的。而Python作为一门功能强大的编程语言,可以通过自动化脚本实现批量发送邮件,从而提高工作效率。AokSend将详细介绍如何使用Python自动化发送邮件。Python自动化发送邮......