文章目录

  • 前言
  • 页面分析
  • 代码设计

前言

hello兄弟们,今天没事干也不晓得更什么内容.就把上次和大家说的可以采用cookies登录12306的方法告诉大家。这个功能熟练了的话还是比较简单的,毕竟可以直接通过pickle(建议大家可以自行搜索下吓唬这个库的功能)获取到cookie的值

页面分析

对于登录模块的页面分析前面的文章也和大家分享过了,就不在这里多说。我本来的思路是设计一个判定来检测本地是否保存有cookie文件。有的话直接获取内部cookie数据登录,没有的话就打开浏览器,由用户扫码登录,然后获取cookie值。但是在扫码登录这一模块出现了问题,在手机上确认登录后网页是不做跳转的,所以我就更换为发送用户密码的方式登录。

代码设计

代码基本上是基于前面文章的自动购票源码改写的,我在这里暂时只添加了判断登录模块,后面的购票暂时未改动。盆友们可以把两篇的源码自行结合,自己尝试修改购票的功能,争取能把‘购’改成‘抢’。
我们先看第一部分代码

if __name__ == '__main__':opt = Options()opt.add_experimental_option('excludeSwitches', ['enable-automation'])  # 去除浏览器顶部显示受自动化程序控制opt.add_experimental_option('detach', True)  # 规避程序运行完自动退出浏览器web = Chrome(options=opt)web.get('https://kyfw.12306.cn/otn/resources/login.html')# 解除浏览器特征识别seleniumscript = 'Object.defineProperty(navigator,"webdriver", {get: () => false,});'web.execute_script(script)user = ''  # 此处输入账号pwd = ''   # 此处输入密码

首先是对浏览器做一些基本处理,定义了用户名,密码参数。这就是最开始的准备行动。然后我们就要开始加入一个判定了​

if __name__ == '__main__':opt = Options()opt.add_experimental_option('excludeSwitches', ['enable-automation'])  # 去除浏览器顶部显示受自动化程序控制opt.add_experimental_option('detach', True)  # 规避程序运行完自动退出浏览器web = Chrome(options=opt)web.get('https://kyfw.12306.cn/otn/resources/login.html')# 解除浏览器特征识别seleniumscript = 'Object.defineProperty(navigator,"webdriver", {get: () => false,});'web.execute_script(script)user = ''  # 此处输入账号pwd = ''   # 此处输入密码if not os.path.exists('./12306cookies.pkl'):login(user, pwd)web.refresh()else:cookies_login()web.refresh()

在判断中我们首先检测是否为首次运行,通过检测是否存在12306cookies.pkl文件进行判断。如果为首次登录就开启浏览器登录,不是就开启cookie登录。

那么我们就要开始修改浏览器登录函数login(user,pwd)了

# 定义登录方法
def login(user, pwd):login_choice = web.find_element(By.XPATH, '//*[@id="toolbar_Div"]/div[2]/div[2]/ul/li[1]')# 点击账号密码登录方式login_choice.click()username = web.find_element(By.XPATH, '//*[@id="J-userName"]')  # 向账号框传入账号信息passwd = web.find_element(By.XPATH, '//*[@id="J-password"]')  # 向密码框传入密码username.click()username.send_keys(user)passwd.click()passwd.send_keys(pwd)# 定位到登录按钮并点击web.find_element(By.XPATH, '//*[@id="J-login"]').click()# 设置显示等待直到滑块的span标签被定位到WebDriverWait(web, 2, 0.5).until(EC.presence_of_element_located((By.ID, 'nc_1_n1z')))span = web.find_element(By.ID, 'nc_1_n1z')action = ActionChains(web)action.click_and_hold(span).move_by_offset(300, 0).perform() # click_and_hold代表点击并保持点击动作。move_by_offset(x, y),其中x代表水平移动距离,y代表垂直移动距离WebDriverWait(web, 10, 1).until(EC.url_to_be('https://kyfw.12306.cn/otn/view/index.html'))pickle.dump(web.get_cookies(), open('./12306cookies.pkl', 'wb'))print('cookies保存成功')

其实对比前文就只是在绕过登录验证后做了一个显示等待并把cookie信息保存到12306cookies.pkl文件中。我这里给大家看下运行效果

可以看到此时我的文件目录下是没有12306cookies.pkl文件的,所以代码运行效果如下


在登录功能事项,目录下保存了我的cookie信息。到了这一步首次登录的功能就实现了。那么我们把目光放到cookie登录上
代码如下

def cookies_login():cookies = pickle.load(open('./12306cookies.pkl', 'rb'))for cookie in cookies:cookie_dic = {'domain': '.12306.cn','name': cookie.get('name'),'value': cookie.get('value')}web.add_cookie(cookie_dic)web.get('https://kyfw.12306.cn/otn/leftTicket/init')print('cookies载入成功')​

​其实操作非常简单,就是加载保存在本地的cookie文件,获取其中保存的关键字段,并使web加载得到的关键字段。我们要注意这里请求的url就不再是登录页面了。而是直接请求到的购票页面。我运行下代码给大家看一下效果

可以看到运行效果非常好,右上角也可以看到我们直接通过本人信息进入到了购票界面。相比前文的普通登录购票要省去很多步骤与时间。时间空余的盆友们可以开始动手试试了。
关于后面的‘抢票’功能的话,我只能说我还没有深入研究,大家可以自己深入研究研究,但最好也别太深入

​另外五一假期临近,后面几天我的课还有点多。假期还要去和好基友happy,假期过后再来和兄弟们交流。大家可以这几天自己动手练练。假期过后我也可能会接着‘研究研究’。就说这么多,五一happy,没事干的朋友也不要久坐于电脑面前,难得的假期记得活动活动。祝大家五一快乐,记得点个小赞赞哦。

爬虫日常-cookies登录12306相关推荐

  1. 爬虫日常-selenium登录12306,绕过验证

    文章目录 前言 代码设计 前言 hello兄弟们,这里是无聊的网友.愉快的周末过去了,欢迎回到学习频道.书接上文,我们说到了再用selenium登录12306时遇到了滑块验证的问题.当前的网站几乎每家 ...

  2. python爬虫登录12306失败_Python网络爬虫(selenium模拟登录12306网站)

    一.通过selenium自动登录12306官网 1.1 超级鹰打码平台API,创建chaojiyin.py文件 #!/usr/bin/env python#coding:utf-8 importreq ...

  3. python登录网站 爬虫_Python爬虫如何使用Cookies登录网站

    最近搞到了一个学校教务系统可以查询全校成绩的账号,恰逢申请奖学金之际,就想用python写个脚本把年级里的绩点排名给爬下来,可是就在写登录的时候发现还是要处理验证码登录的问题,为了避免麻烦,就没使用类 ...

  4. python脚本根据cookies自动登录网站_Python爬虫如何使用Cookies登录网站

    最近搞到了一个学校教务系统可以查询全校成绩的账号,恰逢申请奖学金之际,就想用python写个脚本把年级里的绩点排名给爬下来,可是就在写登录的时候发现还是要处理验证码登录的问题,为了避免麻烦,就没使用类 ...

  5. PyQt5+网络爬虫----打造自己的12306抢票软件

    郑重申明:该文章介绍的技术仅供用于学习,不可恶意攻击12306网站.对12306服务器造成的任何损失,后果自负. 导语:由于12306服务器访问量巨大,并且官方为防止黄牛恶意刷票.以及一些非法攻击.1 ...

  6. 【Python3爬虫】最新的12306爬虫

    一.写在前面 我在以前写过一次12306网站的爬虫,当时实现了模拟登录和查询车票,但是感觉还不太够,所以对之前的代码加以修改,还实现了一个订购车票的功能. 二.主要思路 在使用Selenium做模拟登 ...

  7. python爬虫登录微博_python爬虫-模拟微博登录

    微博模拟登录 这是本次爬取的网址:https://weibo.com/ 一.请求分析 找到登录的位置,填写用户名密码进行登录操作 看看这次请求响应的数据是什么 这是响应得到的数据,保存下来 exect ...

  8. python爬虫登录微博_python爬虫-模拟微博登录功能

    微博模拟登录 这是本次爬取的网址:https://weibo.com/ 一.请求分析 找到登录的位置,填写用户名密码进行登录操作 看看这次请求响应的数据是什么 这是响应得到的数据,保存下来 exect ...

  9. Scrapy搜狗微信:使用cookies登录并使用打码平台自动输入验证码

    Scrapy搜狗微信:使用cookies登录并使用打码平台自动输入验证码 爬虫思路 知识点 前期准备 正文 爬虫思路 通过搜狗微信的搜索功能实现输入关键字搜索并实现自动化翻页爬取100页搜索内容(搜狗 ...

最新文章

  1. byte[] 和string的转换
  2. C语言面向过程与C++面向对象
  3. stl_config.h基本宏
  4. 简析Instgram的搜索架构
  5. 性能测试总结(二)---测试流程篇
  6. 深入理解分布式技术 - 读写分离场景及注意事项解读
  7. 关于CI的服务器与最佳实践,这里有一些思考 1
  8. Python学习笔记:Dict和Set
  9. 网络编程知识预备(4) ——了解应用层的HTTP协议与HTTPS协议
  10. 一、策略模式(Strategy Pattern)
  11. c++ new一个结构体_「C/C++」构造类型及应用:数组、结构体、共用体、枚举类型...
  12. html中js设置密码长度,JS判断邮箱格式,密码输入是否一致,不能为空,长度控制等...
  13. 中国凝血测试耗材行业市场供需与战略研究报告
  14. 乐视android系统耗电量大,乐视手机突然充电慢耗电快,怎么解决?
  15. python硬件测试开发工程师_硬件测试工程师
  16. MVC中Action参数绑定的过程
  17. LINUX下载编译libsndfile
  18. 推荐oracle exadata,Exadata的一些常见误区
  19. 解决xshell中数字小键盘不能使用的问题
  20. 计算机中文件夹属性有哪些,文件和文件夹属性

热门文章

  1. python中停车收费问题_如何用Python识别停车位?
  2. 外卖返利小程序公众号美团饿了么返利系统完整PHP源码下载
  3. CorelDRAW名片设计
  4. ALPHA_101因子(26_50)
  5. 前辈之路[摘自CSDN灌水乐园 袁峰贴]
  6. 针对转动的自适应轮毂装饰盖
  7. 两万元的计算机什么配置,什么叫有钱就是任性?小伙买两万多的电脑眼都不眨,这配置我爱了!...
  8. 关于CSS浏览器兼容问题整理(IE6.0、IE7.0 与 FireFox)
  9. 陈华编程学院 | Laravel5.6模块化实战项目开发之公共模块篇(99元)
  10. 深入dos编程_计算机编程能给孩子带来什么?