当前位置: 首页 > article >正文

selenium+python实现12306自动化抢火车票(二)

往期回顾:

selenium+python实现12306自动化抢火车票(一)

1、根据乘车人姓名匹配,支持1人或多人选择

定位出所有乘车人的元素集,根据姓名集合去元素集里循环迭代匹配,匹配上了操作选中

3eda37d754eef591c986e9d99d12e66c.png

ele_all=driver.find_elements(By.XPATH, "//*[@id='normal_passenger_id']/li")#定位所有乘车人for i in name_list:    for j in range(len(ele_all)):        if i==ele_all[j].text:            driver.find_element(By.ID, "normalPassenger_{0}".format(j)).click()#选择乘车人            print("选择乘车人【{0}】".format(i))

2、车次未开放或已售完,持续查询

车次售完了,或还未开售,这时,预定按钮是灰色不可点击的,这里要做特殊处理,可点击的预定td标签下有a标签,不可点击预定td标签下没有a标签,这时可根据是否有a标签判断预定按钮是否可点击,可点击继续后续流程,不可点击,继续进行查询操作,持续循环,直至有票了或车票开售

7ab0cec19d0aaf6bcae6f976fe97079b.png

6784329485fdcbd5c901075c1cde4638.png

bool = Truewhile bool:    driver.find_element(By.ID, "query_ticket").click() #点查询    print("{0}——{1},日期:【{2}】,车次:【{3}】,查询中~".format(from_city,to_city,date,train_no))    ele=driver.find_elements(By.XPATH, "//div[@class='train']") #列表所有车次    for i in range(len(ele)):        a=True        try:            ele1=driver.find_element(By.XPATH, "//div[@id='train_num_{0}']/../../td[13]/a".format(i))        except:            a=False            print("{0}——{1},日期:{2},车次:{3},车次不存在/还未开售/已售完~".format(from_city, to_city, date, train_no))        if train_no in ele[i].text and a:            print("{0}——{1},日期:【{2}】,车次:【{3}】,已查到车次,且有可买的车票~".format(from_city, to_city, date,train_no))            ele1.click() #点预定            print("{0}——{1},日期:【{2}】,车次:【{3}】,预定中~".format(from_city, to_city, date,train_no))            try:                driver.find_element(By.ID, "login")                driver.find_element(By.ID, "login_close").click()                ele1.click() #点预定                print("{0}——{1},日期:【{2}】,车次:【{3}】,再次预定中~".format(from_city, to_city, date, train_no))            except:                pass            bool=False            break

3、根据不同车次座位类别,选对应的座位席位

638b0342de4ab9e0cb6520848bc6ca6e.png

ticket_info = driver.find_elements(By.XPATH, "//*[@id='check_ticketInfo_id']/tr") #确认页,乘车人车票信息for i in range(len(ticket_info)):    ticket_info_seat=driver.find_elements(By.XPATH, "//*[@id='check_ticketInfo_id']/tr[{0}+1]/td[2]".format(i)) #确认页,乘车人座位类别    if "一等座"==ticket_info_seat[0].text and list[i] in ("1A","2A","1C","2C","1D","2D","1F","2F"):        driver.find_element(By.ID, "{0}".format(list[i])).click()    elif "二等座"==ticket_info_seat[0].text and list[i] in ("1A","2A","1B","2B","1C","2C","1D","2D","1F","2F"):        driver.find_element(By.ID, "{0}".format(list[i])).click()    elif "商务座" == ticket_info_seat[0].text and list[i] in ("1A","2A","1C","2C","1F","2F"):        driver.find_element(By.ID, "{0}".format(list[i])).click()

代码如下

👇👇👇


http://www.kler.cn/a/428255.html

相关文章:

  • java 字符串日期字段格式化前端显示
  • CycleGAN模型解读(附源码+论文)
  • 【shell工具】编写一个批量扫描IP地址的shell脚本
  • 数据结构(树)
  • 初阶1 入门
  • Node.js下载安装及环境配置教程 (详细版)
  • 调度算法(2)
  • Spring Boot性能提升:实战案例分析
  • Android WebView加载本地html文件
  • python学习笔记—1—基础环境配置和字面量
  • Figma入门-旋转效果
  • 什么是Angular?
  • MySQL-SQL语句
  • Golang内存模型总结1(mspan、mcache、mcentral、mheap)
  • Windows系统修改文件的默认打开方式的3种方式
  • 隐式神经网络实现低光照图像增强
  • 《深入理解组件间数据同步:@Provide/@Consume与@Observed/@ObjectLink的特性及限制》
  • Github 2024-12-08 php开源项目日报 Top10
  • 常见函数的Taylor级数展开的可视化过程
  • React初体验 - [Next.js项目]
  • Hive 中 IP 字典的应用:让你的数据分析更加精准
  • 反爬虫机制的全面解析
  • 在做题中学习(79):最小K个数
  • 【Java】使用Socket手搓三次握手 从原理到实践
  • 代码随想录-算法训练营day36(贪心算法06:单调递增的数字,监控二叉树,总结)
  • 六安市第二届网络安全大赛复现