Web自动化实战(自动购票)

前言:

本文章根据自己的学习整理出来,如果有错误请指正,谢谢。

一、项目介绍

这个项目旨在开发一个自动化的购票程序,模拟用户在中国铁路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()










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值