使用Python神器对付12306变态验证码

作者:mrr 时间:2021-01-19 00:14:02 

临近春节,脚本之家小编带领大家用Python抢火车票!

首先我们需要splinter

安装:

pip install splinter -i http://pypi.douban.com/simple –trusted-host pypi.douban.com

然后还需要一个浏览器的驱动,当然用chrome啦

下载地址:

http://chromedriver.storage.googleapis.com/index.html?path=2.20/

根据下载的自己的电脑系统选择下载包,我的windows就用win32了

解压后直接放到C:WindowsSystem32目录下,你当然也可以给这个驱动程序弄个环境变量。

注意:我下的驱动版本是2.19的,根据自己需要下载相应版本,我的2.20版本有报错

首先简单的测试一下吧,推荐ipython代替python自带的交互界面


from splinter.browser import Browser
b = Browser(driver_name="chrome")
b.visit("http://www.baidu.com") ###注意不要去掉http://

然后牛刀小试一下吧,用百度搜索一些东西。比如splinter

在上面我们已经打开百度的网址了

然后我们输入一些像搜索的内容吧

使用Python神器对付12306变态验证码

由上可以发现,该输入框的name=wd,通过fill似乎只能通过name填充

官方说明: Fill the field identified by name with the content specified by value.

那就在输入框搜索splinter,当然也可以输入中文,但是最好指定Unicode编码,如u”我”

b.fill("wd","splinter")

有意思的事,你会发现你都不需要点击“百度一下”就到搜索页面了

但是,如果多次搜索,我们还是需要点击“百度一下”的

下面就不在带着大家找这些元素的id,value什么的了,通过chrome的F12找自己需要的吧

那么把点击栏find出来吧

我们发现,百度搜索栏的value=”百度一下”,id=”su”

所以把这个按钮提取出来


 button = b.find_by_value(u"百度一下")

或者


button = b.find_by_id(u"su")

怎么点击呢?简单如下


button.click()

这有什么用?

我们找找页面里有没有我想找的东西吧,比如找找有没有这个地址“splinter.cobrateam.info”


b.is_text_present("splinter.cobrateam.info")


如果该页面存在,则返回True,反之亦然

怎么退出呢?


b.quit()

好吧,上面就是参照官方文档写的一个简单的入门教程了,下面我们进入正题吧~~~

个人是觉得授人以鱼不如授人以渔的,所以我尽量讲解所有的内容,而非发个代码,让大家copy一下,然后不求甚解。

值得注意的是,我不会去说什么怎么破解验证码以及有什么漏洞可以利用什么的,抢过票的都知道,快一点是一点,而我要做的是就能将机器能做的交给机器做,比如点击,查询,选择等,所以希望必中的还是绕过此文吧。笔者水平也就这么一点点。

首先我们用ipython讲解一下思路

开始当然是导入啦。。


from splinter.browser import Browser
b = Browser(driver_name="chrome")
url = “https://kyfw.12306.cn/otn/leftTicket/init”
b = Browser(driver_name="chrome")
b.visit(url)

第一步手动登陆,能通过下面的代码填充表单,但是我跳不过验证码,暂时没有精力去研究那东西,多多见谅,所以还是等手动选择验证码的。


b.find_by_text(u"登录").click()
b.fill("loginUserDTO.user_name","xxxx")
b.fill("userDTO.password","xxxx")

第二部选择出发地点日期等

通过cookies选择出发地点,日期及目的地

首先瞧瞧我们的cookies当然是没有的出发日期什么的

至于你的出发地点及目的地对于的cookies值是什么,就得靠自己去copy了,我帮不了

使用Python神器对付12306变态验证码

怎么有的这些值?

先将地点日期输进去查询一下,然后chrome按F12  找到这一部分即可

打开浏览器跳到这个页面当然是没有我们需要的信息的,比如下面这样


b.cookies.all()
{u'BIGipServerotn': u'1977155850.38945.0000',
u'JSESSIONID': u'0A01D97598F459F751C4AE8518DBFB300DA7001B67',
u'__NRF': u'95D48FC2E0E15920BFB61C7A330FF2AE',
u'current_captcha_type': u'Z'}

然后我们需要添加出发地,这个得自己去查了,是简单的url加密


b.cookies.add({"_jc_save_fromStation":"%u4E0A%u6D77%2CSHH"})

添加出发日期


b.cookies.add({"_jc_save_fromDate":"2016-01-20"})


添加目的地




b.cookies.add({u'_jc_save_toStation':'%u6C38%u5DDE%2CAOQ'})


注:如果是修改的话,还是调用add方法,如果传入的字典key值已存在则替换


比如,将目的地改为其他地方xxxx,如下即可




b.cookies.add({u'_jc_save_toStation':'xxxxxx'})

以上内容给大家介绍了使用Python神器对付12306变态验证码,希望本文分享能够帮助到大家。

标签:python,12306,变态,验证码
0
投稿

猜你喜欢

  • Python3.遍历某文件夹提取特定文件名的实例

    2022-12-08 04:48:59
  • vue 引用自定义ttf、otf、在线字体的方法

    2024-04-30 10:18:47
  • 五步让你成为GO 语言高手

    2023-06-16 18:00:41
  • SQL语句练习实例之三——平均销售等待时间

    2011-10-24 20:11:47
  • golang 自旋锁的实现

    2024-05-02 16:24:03
  • Python对PDF文件的常用操作方法详解

    2021-10-13 06:49:56
  • python实现蒙特卡罗模拟法的实践

    2023-08-11 02:22:02
  • 解决seaborn在pycharm中绘图不出图的问题

    2023-11-29 02:22:52
  • MySQL操作并使用Python进行连接

    2024-01-25 00:54:56
  • python实现地牢迷宫生成的完整步骤

    2021-07-26 19:27:56
  • python使用PyGame绘制图像并保存为图片文件的方法

    2023-05-13 16:17:03
  • Python 等分切分数据及规则命名的实例代码

    2023-03-26 05:01:17
  • javascript jQuery $.post $.ajax用法

    2024-04-16 08:52:52
  • 获取星期几的名称

    2012-01-29 18:16:31
  • 关于golang监听rabbitmq消息队列任务断线自动重连接的问题

    2024-04-25 13:21:03
  • 详解vue 模版组件的三种用法

    2024-05-10 14:18:22
  • Tensorflow的DataSet的使用详解

    2021-03-19 18:18:04
  • Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结

    2024-05-09 14:56:40
  • Python机器学习算法库scikit-learn学习之决策树实现方法详解

    2023-07-26 20:44:28
  • 查找sqlserver查询死锁源头的方法 sqlserver死锁监控

    2024-01-23 01:10:46
  • asp之家 网络编程 m.aspxhome.com