前言:
本文章根据自己的学习整理出来,如果有错误请指正,谢谢。
一、项目介绍
这个项目旨在开发一个自动化的购票程序,模拟用户在中国铁路12306网站上的购票流程。该程序将自动完成登录中国铁路12306网站并验证,输入购票信息进行预订等购票流程。此项目可以帮助理解自动化浏览器操作等技术。
二、环境配置
2.1 python+selenium的基础环境
python下载地址:https://www.python.org/
pycharm下载地址:https://www.jetbrains.com/zh-cn/pycharm/download
2.2 selenium环境配置
pycharm → Terminal → pip install selenium==4.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.3 webdriver配置
检测谷歌浏览器版本
下载对应版本的Chromedriver:https://registry.npmmirror.com
解压,拷贝Chromedriver.exe到python根路径
三、项目设计
购票流程:登录→验证→进入购票→填写购票信息(出发地,目的地,时间)→选择车次→预订
根据购票流程本项目设计分为四大模块
3.1 登录模块
填写个人信息→点击登录按钮
3.2 验证模块
由于12306仅支持短信验证,因此我将使用一个变量来手动输入短信验证码。在实际开发项目中,可以使用万能验证码来实现这自动化验证功能。
输入个人信息→点击获取验证码→输入验证码→点击确定
3.3 购票模块
鼠标移到车票上→点击单程→输入购票信息→点击查询
3.4 预订模块
选择车次→点击预订
四、项目实施
4.1 登录模块
#输入用户名
driver.find_element('xpath', "/html/body/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/input").send_keys('***********')
#输入密码
driver.find_element('xpath', "/html/body/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/input").send_keys('***********')
#点击登录
driver.find_element('xpath',"/html/body/div[1]/div[2]/div[2]/div[1]/div[1]/div[4]/a").click()
4.2 验证模块
#输入身份证尾号
driver.find_element('xpath', "/html/body/div[1]/div[4]/div[2]/div[1]/div/div[1]/input").send_keys('****')
#获取验证码
driver.find_element('xpath',"/html/body/div[1]/div[4]/div[2]/div[1]/div/div[2]/a").click()
#输入验证码
check=input()
driver.find_element('xpath', "/html/body/div[1]/div[4]/div[2]/div[1]/div/div[2]/input").send_keys(check)
#确定,进入购票页面
driver.find_element('xpath',"/html/body/div[1]/div[4]/div[2]/div[1]/div/div[4]/a").click()
4.3 购票模块
#获取车票元素
ele =driver.find_element('xpath',"/html/body/div[2]/div[1]/div[2]/ul/li[2]/a")
#鼠标移到车票上
act = ActionChains(driver)
act.move_to_element(ele)
act.perform()
#选择单程
driver.find_element('xpath',"/html/body/div[2]/div[1]/div[2]/ul/li[2]/div/div[1]/ul/li[1]/a").click()
#选择出发地
ele=driver.find_element('xpath', "/html/body/div[2]/div[7]/div[8]/form/div[2]/ul/li[1]/div/input[2]")
ele.click()
ele.send_keys('广州')
driver.find_element('xpath',"html/body/div[2]/div[9]/div/div[2]/div[3]").click()
#选择目的地
ele=driver.find_element('xpath', "/html/body/div[2]/div[7]/div[8]/form/div[2]/ul/li[3]/div/input[2]")
ele.click()
ele.send_keys('深圳')
driver.find_element('xpath',"/html/body/div[2]/div[9]/div/div[2]/div[4]").click()
#输入时间
ele=ele=driver.find_element('xpath', "/html/body/div[2]/div[7]/div[8]/form/div[2]/ul/li[4]/div/input")
ele.clear()
ele.send_keys('2024-07-10')
#点击查询
driver.find_element('xpath',"/html/body/div[2]/div[7]/div[8]/form/div[3]/div").click()
4.4 预订模块
#找到指定车次的预定按钮
driver.find_element('xpath','//a[text()="C8043"]/ancestor::tr//a[text()="预订"]').click()
4.5 全部代码
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options
#添加用户文件
option=Options()
option.add_argument(r'--user-data-dir=C:\Users\25465\AppData\Local\Google\Chrome\User Data')
driver = webdriver.Chrome(options=option)
#添加隐式等待
driver.implicitly_wait(10)
#打开12306的登录页面
driver.get('https://kyfw.12306.cn/otn/resources/login.html')
#https://kyfw.12306.cn/otn/resources/login.html
#输入用户名
driver.find_element('xpath', "/html/body/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/input").send_keys('***********')
#输入密码
driver.find_element('xpath', "/html/body/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/input").send_keys('***********')
#点击登录
driver.find_element('xpath',"/html/body/div[1]/div[2]/div[2]/div[1]/div[1]/div[4]/a").click()
#输入身份证尾号
driver.find_element('xpath', "/html/body/div[1]/div[4]/div[2]/div[1]/div/div[1]/input").send_keys('****')
#获取验证码
driver.find_element('xpath',"/html/body/div[1]/div[4]/div[2]/div[1]/div/div[2]/a").click()
#输入验证码
check=input()
driver.find_element('xpath', "/html/body/div[1]/div[4]/div[2]/div[1]/div/div[2]/input").send_keys(check)
#确定,进入购票页面
driver.find_element('xpath',"/html/body/div[1]/div[4]/div[2]/div[1]/div/div[4]/a").click()
#获取车票元素
ele =driver.find_element('xpath',"/html/body/div[2]/div[1]/div[2]/ul/li[2]/a")
#鼠标移到车票上
act = ActionChains(driver)
act.move_to_element(ele)
act.perform()
#选择单程
driver.find_element('xpath',"/html/body/div[2]/div[1]/div[2]/ul/li[2]/div/div[1]/ul/li[1]/a").click()
#选择出发地
ele=driver.find_element('xpath', "/html/body/div[2]/div[7]/div[8]/form/div[2]/ul/li[1]/div/input[2]")
ele.click()
ele.send_keys('广州')
driver.find_element('xpath',"html/body/div[2]/div[9]/div/div[2]/div[3]").click()
#选择目的地
ele=driver.find_element('xpath', "/html/body/div[2]/div[7]/div[8]/form/div[2]/ul/li[3]/div/input[2]")
ele.click()
ele.send_keys('深圳')
driver.find_element('xpath',"/html/body/div[2]/div[9]/div/div[2]/div[4]").click()
#输入时间
ele=ele=driver.find_element('xpath', "/html/body/div[2]/div[7]/div[8]/form/div[2]/ul/li[4]/div/input")
ele.clear()
ele.send_keys('2024-07-10')
#点击查询
driver.find_element('xpath',"/html/body/div[2]/div[7]/div[8]/form/div[3]/div").click()
#找到指定车次的预定按钮
driver.find_element('xpath','//a[text()="C8043"]/ancestor::tr//a[text()="预订"]').click()