如何定制一款12306抢票浏览器——构架
快春节了,火车票一票难求。虽然黄牛市场冷淡了,但是互联网“娱乐界”却越来越闹腾了。先是猎豹等浏览器推出抢票专版(插件),然后是铁道部约谈金山,之后流传工信部叫停抢票插件,之后再是工信部出面否认,最后金山某某人在视频上鄙视了一下铁道部:称愿意提供技术支持……(转载请指明出于breaksoftware的csdn博客)
我也是抢票大军中的一员。记得上个周六,我早早的爬了起来抢票,结果看着票一张张减少,而自己始终没有抢到一张票!!有点愤怒!能怎么办?只能不停的刷呗!我是从上午10点一直刷到下午3点,才刷到一张7号下午的票。这迫使我7号下午得请半天假。晚上和老爸汇报了下抢票战果,老爸问我:你自己怎么不写个抢票软件呢?是的,从那天上午10点起,我就开始了这个想法——定制一款抢票软件。可以说,经过一个星期的编写,大致可以使用了,而且我实现了猎豹等浏览器没有的功能——自动识别验证码。虽然准确度无法达到100%,但是准确度在50%以上是没问题的(我验证了十几个验证码的自动识别,不对的大概就3个左右)。我是准备在订购返程票之前将这个工具写好,并提供给朋友使用。但是我昨天发现,12306将验证码改了!以前的特征也基本不在了,这使得我这个软件中最大的亮点——验证码自动识别失效!这个对我打击挺大的。我也就只能在CSDN上分享下我在编写12306抢票浏览器时的思考和问题。
构架
一提到构架,我就觉得心虚。其实我这个压根没什么构架。来点实际的,设想一下抢票这个场景:
人物:一个人、一台开着12306网页的电脑。
事件:一个人通过键盘和鼠标在12306页面上进行输入和点击。
我们可以将这个场景简化:
这个人就是一个“进程”,他不吃饭不用陪女朋友更不用上厕所,它要做的就是操作12306这个页面。
打开12306网页的浏览器也是个进程,这个进程中执行一系列复杂的网络传输和渲染操作。相对来说“人”这个进程做的事就很简单了,因为它很单纯,目标唯一,我们甚至可以把它看成一个单线程进程。但是进程间通信可能又是个麻烦点,虽然这个技术不麻烦,但是从实用角度说,能不那么复杂就别那么复杂。那如何弄呢?我们可以把“人”这个进程和12306浏览器合并为一个进程,“人”只是这个浏览器进程中的一个线程。我们可以将“人”这个线程想成是个非常独立于浏览器的线程,它们之间似乎是割裂的,但是又在流程上存在着一定的关系。这个就是我说的“构架"。
相关文章:
一些链接, 关于不可变数据
这篇笔记介绍不可变数据, Persistent Data Structure 和 Immutable. 但是不深入数据结构实现, 函数式编程理论. 定义 https://en.wikipedia.org/wiki/Persistent_data_structure In computing, a persistent data structure is a data structure that always preserves the pre…
囚犯学会编程之后会发生什么?
作者 | Simone Stolzoff译者 | 苏本如,责编 | 郭芮出品 | CSDN(ID:CSDNnews)【导读】Slack是硅谷一家多元化的公司,它雇佣了三名以前被监禁的程序员。但事实上,当一个人从监狱获释时,监禁的耻辱…

如何定制一款12306抢票浏览器——用户界面
用户界面 我不打算写个Windows界面。因为这个软件的全部就是个浏览器。我准备将”浏览器“进行到底,所以我选择使用html作为我们的用户界面。我也并不打算从头开始写一个浏览器,我使用了《内嵌IE网页窗口中消除IE默认脚本设置影响的方法》中基于WTL的浏览…

Study on Android【四】--显示控件使用
Android的界面显示同样也是基于控件的。通常是用View(包括ViewGroup)控件配上XML的样式来做的。具体细节不想说了,可以参考 Samples里的ApiDemos/View,和View的Doc,以及Implementing a UI这篇Doc。其他还有很多&#x…

修改Vim配色方案
1. 查看备选的配色方案/usr/share/vim/vim74/colors2. 查看当前使用的配色方案在命令模式下输入 :colorscheme可见当前使用的配色方案为ron3.选择和设置配色方法编辑 ~/.vimrc文件,如选择ron.vim对应的配色方案,则添加 colorscheme ron4. 设置某项颜色--…

如何定制一款12306抢票浏览器——启动“人”线程
启动“人”线程 在《如何定制一款12306抢票浏览器——构架》一文中,我们提到“人”线程。对于熟悉Window编程的同学来说,线程间通信和信息传递不是难题。但是由于浏览器和我们“人”线程之间传递的是COM对象,这个过程就没有那么简单了。&…

看看你是《老朋友》(青春六人行)里的哪一个
(点击“which friends character are you?”连接可以进入问卷页面) Which Friends Character Are You? You are Rachel. Youre very selfish and pay great attention to image. Spoiled when you were young, you were always the popular and sn…

360金融沈赟:只有适配实践的技术才能实现价值掘金
金融科技应用的新场景、新需求层出不穷,已成为创新技术的理想“试验田”。然而当“创新”浪潮褪去,行业回归审慎与冷静后不难发现,并非所有创新技术都会深入金融土壤。对此,360金融首席数据科学家沈赟认为,只有适配实践的技术才能…

swift(一)基础变量类型
import Foundationprintln("Hello, World!")/*int a; */ var a 10 //隐式类型转换 a 9 println(a)let b 10 println(b)/* 类型标注 *///var x:Int //x 10.3不支持隐式转换let x: Int 10/* 名称不用在符合标示符的规范 */ let 常量 10/* 基本数据类型࿱…

如何定制一款12306抢票浏览器——实现自动查询和预订功能
检查是否进入订票页面 判断是否进入订票页面,我是确定了两个标准:(转载请指明出于breaksoftware的csdn博客) 1 网址是否为http://www.12306.cn/mormhweb/kyfw/ 2 该页面否有查询按钮 BOOL CDeal12306WebPage::IsQueryPage( CComPt…

以数据为中心,立足六大技术支柱,英特尔推动神经拟态计算、量子计算前沿探索
近日,英特尔中国研究院院长宋继强围绕 “英特尔如何构建技术基石,驱动未来计算”为主题做了演讲。他阐述了英特尔将坚持“以数据为中心”的目标,并指出依托于XPU产品组合,英特尔通过异构整合和oneAPI软件平台来推动实现超异构计算…

Fedora 7 播放器totem
说实话,我喜欢这个东东,简约而不简单。我以前一直用mplayer,不过还是喜欢totem的长相。很多人说不能播放,可以这么做,让它支持全部(用mplayer的codecs):(1)首先将系统已有的totem移去 # yum remove totem(2…

如何定制一款12306抢票浏览器——处理预订页面和验证码自动识别功能
判断是否进入预订页面我们先看一下预订页面的结构(转载请指明出于breaksoftware的csdn博客)可以见得,这个页面也是嵌入了两个IFrame。关于IFrame的跨域问题,我已经在前一篇文章中讲述了解决办法。我判断是否是预订页面是通过两个依…
利用MTCNN和FaceNet实现人脸检测和人脸识别 | CSDN博文精选
作者 | pan_jinquan来源 | CSDN博文精选(*点击阅读原文,查看作者更多文章)人脸检测和人脸识别技术算是目前人工智能方面应用最成熟的技术了。本博客将利用MTCNN和FaceNet搭建一个实现人脸检测和人脸识别的系统。基本思路也很简单,…

[导入]郁闷`````[原]
阅读全文 类别:职场生涯 查看评论文章来源:http://hi.baidu.com/huqing7002/blog/item/b69a27082063fbd263d98619.html转载于:https://www.cnblogs.com/huqing7002/archive/2007/12/14/1007049.html

code标签的妙用
code标签的秒用是: 当你写了一大版的css或者html或者其他代码,想要去掉代码中多余的空格和换行从而达到压缩的目的的时候,可以新建一个html文件,然后把想要压缩的代码段放到code标签里,保存,浏览器浏览&…

如何定制一款12306抢票浏览器——完结篇
差不多花了一个星期的业余时间去完成了相关的编码。最后也只是使用了5篇文章将整个大题流程和使用的关键技术介绍了一下。其中有很多酸甜苦辣,其中记忆最为深刻的就是我对图像做了处理后,tesseract-ocr对验证码识别的准确度提升非常大。当我还沉浸子在这片喜悦之中时,12306将…

所有各数据库或文件的连接串定义CHM文件.
从www.connectionstrings.com 中制作生成/Files/margiex/DotnetConn.rar
钢铁侠“变身”AI布道师?小罗伯特·唐尼这次推出一部AI科普纪录片
作者 | 若名出品 | AI科技大本营(ID:rgznai100)穿着一身运动便服,脱去了铠甲的“钢铁侠”托尼斯塔克最近出现在荧屏上,他正与身后的AI助手互动,一本正经讲解着“机器学习”、“算法”这些词汇。不过,这个AI…

Wireshark数据抓包教程之Wireshark的基础知识
Wireshark数据抓包教程之Wireshark的基础知识 Wireshark的基础知识 在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及。Wireshark作为国际知名的网络数据抓包和分析工具,可以广泛地应用各种领域࿰…

WMI技术介绍和应用——查询快捷方式、映射磁盘和虚拟内存信息
本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。(转载请指明出于breaksoftware的csdn博客) 因为将要介绍的三个模块都比较简单,故将这三…
不要痴迷蓝牙耳机了,出门选这个准没错,99W+人的选择
01有一种耳机啊它是真的不适合在长途火车上使用那就蓝牙耳机除非你带充电宝还有一种耳机啊它是真的不适合丢那就是带有充电仓的耳机因为充电仓丢了这个耳机基本上就废了02这不,我就经历了,活生生的例子出差的路上在火车上把耳机充电仓给弄丢了只剩孤零零…

结构化文件存取
纲要:AssignFile: 关联Rewrite: 创建并打开一个新文件, 如已存在则覆盖Reset: 打开已存在的文件; 追加也要用它先打开, 然后再移动指针; Append 是文本文件专用的CloseFile: 关闭FileSize: 记录数FilePos: 返回文件的当前位置Seek: 把文件指针移到指定位置(只用于结构化文件)Eo…

_00021 尼娜抹微笑伊拉克_谁的的最离奇的异常第二阶段 Jedis pool.returnResource(jedis)...
笔者博文:妳那伊抹微笑博客地址:http://blog.csdn.net/u012185296博文标题:_00021 妳那伊抹微笑_谁的异常最诡异第二期之 Jedis pool.returnResource(jedis)个性签名:世界上最遥远的距离不是天涯,也不是海角࿰…

WMI技术介绍和应用——查询系统信息
本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。(转载请指明出于breaksoftware的csdn博客) 本机主要知识点是Win32_ComputerSystem类。通过该类我们…
利用OpenCV实现抖音最强变脸术 | CSDN原力计划
作者 | 亓斌来源 | CSDN原力计划获奖作品(*点击阅读原文,查看作者更多文章)最近一个“最强变脸术”又火爆抖音啦,还不知道的朋友建议先打开抖音,搜索“最强变脸术”看个十来个视频再回来看这篇文章。视频看起来炫酷&am…

思科PIX防火墙的实际应用配置
PIX:一个合法IP完成inside、outside和dmz之间的访问 现有条件:100M宽带接入,分配一个合法的IP(222.134.135.98)(只有1个静态IP是否够用?);PiX515e-r-DMZ-BUN1台ÿ…

CommonJS 的 AMD 规范
异步模块定义(Asynchronous Module Definition,简称 AMD)API 描述了一种定义模块的机制,模块及其依赖模块可以通过这种机制进行加载。该机制特别适用于浏览器。 本规范曾被称为 Modules Transport/C,但本规范主要不是用…
易观的大数据中台之路
作者 | 易观CTO郭炜出品 | AI科技大本营(ID:rgznai100)本文为CSDN即将推出的《新战场:决胜中台》专刊的第 2 篇文章。什么是数据中台?中台的定义来自于投资银行,简单说来,投行当中前台是赚钱的、后台是做支…

WMI技术介绍和应用——查询系统信息和补丁包信息
本文使用了《 WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。( 转载请指明出于breaksoftware的csdn博客)本文主要知识点是Win32_OperatingSystem和Win32_Quick…