一、流程介绍
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的自动登录及购票】相关推荐

  1. 利用python+selenium带上cookies自动登录bilibili

    利用python+selenium带上cookies自动登录bilibili 环境 selenium的安装 思路 第一部分:手动登录,保存cookies 第二部分:读取cookies自动登录 环境 环 ...

  2. Python+Selenium自动化测试——126邮箱自动登录脚本(登录首页是二维码,切入账号密码输入框)

    Python+Selenium自动化测试--126邮箱自动登录脚本 版权声明:本文为博主原创文章,未经允许不得转载.https://blog.csdn.net/qiao_wan/article/det ...

  3. python+selenium实现12306自动登录刷票抢票(自己做黄牛?!)

    上一篇写了12306的自动登录破解验证图https://blog.csdn.net/weixin_38283159/article/details/86498159 这篇算是它的后续部分加上了简单的刷 ...

  4. 【Python】基于Selenium实现上海大学校园网自动登录

    [Python]基于Selenium实现上海大学校园网自动登录 安装selenium Selenium官网 以anaconda环境为例,创建一个Selenium的虚拟环境,若不需要可以不做第一.二步 ...

  5. Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录

    Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录 以anaconda环境为例,创建一个Selenium的虚拟环境: 一.安装selenium 1. conda cr ...

  6. Python+Selenium+phantomjs实现网页模拟登录和截图

    Python+Selenium+phantomjs实现网页模拟登录和截图 本文全部操作均在windows环境下 安装 Python Python是一种跨平台的计算机程序设计语言,它可以运行在Windo ...

  7. python+selenium实现12306抢票

    python+selenium实现12306抢票 一.准备工作 1.要先下载相关的包,selenium.interval.最好使用国内清华源 pip install (which package) - ...

  8. python + selenium 实现 问卷星自动抢讲座

    python + selenium 实现 问卷星自动抢讲座,抢不到讲座的同学可以借鉴一下 这是我写的代码 from selenium import webdriver from selenium.we ...

  9. python+selenium 实现 问卷星自动抢讲座

    python + selenium 实现 问卷星自动抢讲座 文章目录 python + selenium 实现 问卷星自动抢讲座 一.代码 二.解析 1.安装selenium库 1)PyCharm 编 ...

  10. Python《使用Selenium 和pyautogui 实现自动登录淘宝》

    有了上一博文学习即基础,这一节想来学习下自动登录淘宝. 直接整上测试代码: from selenium import webdriver # import logging import time fr ...

最新文章

  1. eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...
  2. python 7-10梦想的度假胜地_7-8----7-10练习
  3. Mysql安装注意问题
  4. 通过java api操作hdfs(kerberos认证)
  5. hibernate select语句返回的类型
  6. Python3之数据类型
  7. LeetCode: Single Number I II
  8. Linux C语言实现清除文件中的内容
  9. 【Codeforces】Gym 101173B Bipartite Blanket 霍尔定理+状压DP
  10. 运维部门工作总结_部门动态 | 主动出击 超前谋划 全面做好园区网络运维工作...
  11. 面向对象的三个基本特征_杂谈:JavaScript面向对象
  12. 四大类型的BPM平台
  13. 1NF,2NF,3NF,BCNF范式(学习笔记)
  14. 【C++】.h文件与.c文件的区别
  15. TeamViewer轻松解决企业远程办公安全隐患
  16. 转:开源图形库 c语言-图形图像库 集合
  17. vue学习之mintui picker选择器实现省市二级联动
  18. 三运放构建仪表放大器
  19. python邮件模块_python 邮件模块
  20. 第一次穿睡衣直播。。。

热门文章

  1. kafka mysql 迁移,kafka迁移数据目录
  2. 发票校验属于物料管理(MM)模块,发票为财务和成本控制提供付款信息和发票评估。
  3. 南京信息工程大学 第二届程序设计大赛团队赛 试题
  4. cocos creator 广告控制脚本
  5. 2020蚂蚁森林自动收能量-保持更新
  6. Vue 开源项目库汇总
  7. RPM构建 - SPEC文件参数解析
  8. Pyinstaller的Spec文件用法
  9. 从UI设计在国内的发展历程来看,UI设计发展前景如何?
  10. AkShare-期货数据-连续合约数据,2010年的IFO怎么获取呢?