【使用python+selenium实现12306的自动登录及购票】
一、流程介绍
1. 访问登录页面
在此页面输入用户名及密码后,点击立即登录。
注意事项:
一些网站在使用Selenium时会有前端检测,为了避免这种检测,需要对ChromeOptions进行设置,通过调用add_argument方法添加参数–disable-blink-features。
代码实现:
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled') # 避免webdriver检测driver = webdriver.Chrome(options=options) # Chrome浏览器
driver.set_window_size(1080, 800);
driver.implicitly_wait(10);# 打开网页
driver.get("https://kyfw.12306.cn/otn/resources/login.html")
user = driver.find_element_by_id("J-userName");
user.click();
user.send_keys("xxxxxxxx");
pswd = driver.find_element_by_id("J-password");
pswd.click();
pswd.send_keys("xxxxxxxx");
butten = driver.find_element_by_id("J-login");
butten.click();
time.sleep(1);
2.选择验证方式
注意事项:
这里的拖拽需要通过 ActionChains来实现。ActionChains用来模拟鼠标操作,比如单击、双击、点击鼠标右键、拖拽等等。
代码实现:
while True:try:span = driver.find_element_by_id("nc_1_n1z")actions = ActionChains(driver) # 行为链实例化time.sleep(1) # 等待2秒钟# 经截图测量,滑块需要滑过的距离为300像素actions.click_and_hold(span).move_by_offset(300, 0).perform() # 滑动actions.release();time.sleep(1);a = driver.find_element_by_id("nc_1_refresh1");# 查找刷新按钮,如果没有说明登录成功,执行except跳出循环a.click();# 如果刚刚滑动失败,则点击刷新,重新滑动except Exception as e:print(e);break;
3.关闭提示框,点击“车票预订”链接,跳转至车票预订页面**
代码实现:
sure = driver.find_element_by_class_name("btn-primary");
sure.click();
link_for_ticket = driver.find_element_by_id("link_for_ticket");
link_for_ticket.click();
4.设置出发地、目的地、出发日、车次类型等信息
代码实现:
driver.find_element_by_id("fromStationText").click();
driver.find_element_by_css_selector(u"[title=长沙]").click();
driver.find_element_by_id("toStationText").click();
driver.find_element_by_css_selector(u"[title=北京]").click();
time.sleep(5);
train_date = driver.find_element_by_id("train_date");
train_date.clear();
tomorrow = (date.today() + timedelta(days= 1)).strftime("%Y-%m-%d")
train_date.send_keys(tomorrow);
driver.find_element_by_css_selector("#_ul_station_train_code > li:nth-child(1) > label").click()
5.点击“预订”,选择乘车人,完成购票
代码实现:
while True:try:driver.find_element_by_id("query_ticket").click();driver.find_element_by_xpath("/html/body/div[3]/div[7]/div[8]/table/tbody[1]/tr[1]/td[13]").click();time.sleep(3);driver.find_element_by_id("normalPassenger_0").click();driver.find_element_by_id("submitOrder_id").click();driver.find_element_by_link_text("确认").click();except:pass;
二、完整代码
import time
from datetime import date, timedelta
from selenium import webdriver
from selenium.webdriver import ActionChainsoptions = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled') # 避免webdriver检测driver = webdriver.Chrome(options=options) # Chrome浏览器
driver.set_window_size(1080, 800);
driver.implicitly_wait(10);# 打开网页
driver.get("https://kyfw.12306.cn/otn/resources/login.html")
user = driver.find_element_by_id("J-userName");
user.click();
user.send_keys("xxxxxxx");
pswd = driver.find_element_by_id("J-password");
pswd.click();
pswd.send_keys("xxxxxxx");
butten = driver.find_element_by_id("J-login");
butten.click();
time.sleep(1);while True:try:span = driver.find_element_by_id("nc_1_n1z")actions = ActionChains(driver) # 行为链实例化time.sleep(1) # 等待2秒钟# 经截图测量,滑块需要滑过的距离为300像素actions.click_and_hold(span).move_by_offset(300, 0).perform() # 滑动actions.release();time.sleep(1);a = driver.find_element_by_id("nc_1_refresh1");# 查找刷新按钮,如果没有说明登录成功,执行except跳出循环a.click();# 如果刚刚滑动失败,则点击刷新,重新滑动except Exception as e:print(e);break;sure = driver.find_element_by_class_name("btn-primary");
sure.click();link_for_ticket = driver.find_element_by_id("link_for_ticket");
link_for_ticket.click();
driver.find_element_by_id("fromStationText").click();
driver.find_element_by_css_selector(u"[title=长沙]").click();
driver.find_element_by_id("toStationText").click();
driver.find_element_by_css_selector(u"[title=北京]").click();
time.sleep(5);
train_date = driver.find_element_by_id("train_date");
train_date.clear();tomorrow = (date.today() + timedelta(days= 1)).strftime("%Y-%m-%d")
train_date.send_keys(tomorrow);
driver.find_element_by_css_selector("#_ul_station_train_code > li:nth-child(1) > label").click()while True:try:driver.find_element_by_id("query_ticket").click();driver.find_element_by_xpath("/html/body/div[3]/div[7]/div[8]/table/tbody[1]/tr[1]/td[13]").click();time.sleep(3);driver.find_element_by_id("normalPassenger_0").click();driver.find_element_by_id("submitOrder_id").click();driver.find_element_by_link_text("确认").click();except:pass;
【使用python+selenium实现12306的自动登录及购票】相关推荐
- 利用python+selenium带上cookies自动登录bilibili
利用python+selenium带上cookies自动登录bilibili 环境 selenium的安装 思路 第一部分:手动登录,保存cookies 第二部分:读取cookies自动登录 环境 环 ...
- Python+Selenium自动化测试——126邮箱自动登录脚本(登录首页是二维码,切入账号密码输入框)
Python+Selenium自动化测试--126邮箱自动登录脚本 版权声明:本文为博主原创文章,未经允许不得转载.https://blog.csdn.net/qiao_wan/article/det ...
- python+selenium实现12306自动登录刷票抢票(自己做黄牛?!)
上一篇写了12306的自动登录破解验证图https://blog.csdn.net/weixin_38283159/article/details/86498159 这篇算是它的后续部分加上了简单的刷 ...
- 【Python】基于Selenium实现上海大学校园网自动登录
[Python]基于Selenium实现上海大学校园网自动登录 安装selenium Selenium官网 以anaconda环境为例,创建一个Selenium的虚拟环境,若不需要可以不做第一.二步 ...
- Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录
Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录 以anaconda环境为例,创建一个Selenium的虚拟环境: 一.安装selenium 1. conda cr ...
- Python+Selenium+phantomjs实现网页模拟登录和截图
Python+Selenium+phantomjs实现网页模拟登录和截图 本文全部操作均在windows环境下 安装 Python Python是一种跨平台的计算机程序设计语言,它可以运行在Windo ...
- python+selenium实现12306抢票
python+selenium实现12306抢票 一.准备工作 1.要先下载相关的包,selenium.interval.最好使用国内清华源 pip install (which package) - ...
- python + selenium 实现 问卷星自动抢讲座
python + selenium 实现 问卷星自动抢讲座,抢不到讲座的同学可以借鉴一下 这是我写的代码 from selenium import webdriver from selenium.we ...
- python+selenium 实现 问卷星自动抢讲座
python + selenium 实现 问卷星自动抢讲座 文章目录 python + selenium 实现 问卷星自动抢讲座 一.代码 二.解析 1.安装selenium库 1)PyCharm 编 ...
- Python《使用Selenium 和pyautogui 实现自动登录淘宝》
有了上一博文学习即基础,这一节想来学习下自动登录淘宝. 直接整上测试代码: from selenium import webdriver # import logging import time fr ...
最新文章
- eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...
- python 7-10梦想的度假胜地_7-8----7-10练习
- Mysql安装注意问题
- 通过java api操作hdfs(kerberos认证)
- hibernate select语句返回的类型
- Python3之数据类型
- LeetCode: Single Number I II
- Linux C语言实现清除文件中的内容
- 【Codeforces】Gym 101173B Bipartite Blanket 霍尔定理+状压DP
- 运维部门工作总结_部门动态 | 主动出击 超前谋划 全面做好园区网络运维工作...
- 面向对象的三个基本特征_杂谈:JavaScript面向对象
- 四大类型的BPM平台
- 1NF,2NF,3NF,BCNF范式(学习笔记)
- 【C++】.h文件与.c文件的区别
- TeamViewer轻松解决企业远程办公安全隐患
- 转:开源图形库 c语言-图形图像库 集合
- vue学习之mintui picker选择器实现省市二级联动
- 三运放构建仪表放大器
- python邮件模块_python 邮件模块
- 第一次穿睡衣直播。。。