`
limu
  • 浏览: 323085 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
其实这篇也可以叫:《那些年,我们一起刷酷讯》。

每年春运买火车票这事儿都能让京飘的同学们愁上个把月,其实每年也没看到谁回不去。04、05想找一张二手票很难,263跳蚤市场,水木,贴吧到处去淘。到了06春节前,事情有了转机,出现了这么个网站kooxoo.com,发迹于水木清华bbs,做的事情就是垂直搜索二手火车票转让信息,这个网站就是如今大名鼎鼎的酷讯。

刷酷讯也不那么容易,往往刷到了二手信息要不电话打不通,要不加价高的离谱。于是,就有了刷票脚本v1.0。从06到11年这小脚本一直升级到了v6.0,而功能其实很简单,开一个网页每隔三五分钟刷下酷讯的页面,和上次的结果做比较,发现新的信息就弹出个提示。这样就不用一直盯着网页看,又能第一时间拿到信息。那些有能量的人,经常会从多个渠道拿到重复的车票,他们并不屑于冒风险赚个几百差价,这就是最理想的交易对象。

这个小脚本见证了酷讯的变化,也记载了一次次爬与被爬之间小小的博弈。今年火车票全面实名制,我想我和酷讯都可以好好歇歇了,回忆这几年写脚本的过程,还是有些技术点蛮有意思的,特别这个小脚本一直使用JavaScript实现,而JS在浏览器端受到了诸多限制,趁着还没全忘,在此记录一下。

不过先说明下这个小脚本的使用者除了我,也就是部门内的一些同事,刷新频率也一直没有改的过于频繁,对酷讯的影响绝不会超过半个QPS,若说我攻击还是省省哈。

【跨域XHR】
脚本的实现方案主要分为两种:跨域XHR和第三方脚本潜入。06、07年,我用的是前面一种。

我首先想到的是用iframe或者frameset把kx的页面潜入到我的页面中,然后我的页面访问kx页面的内容,我们当时的系统中成天这样干。但很快发现这不可能,这是我的前端技术生涯中第一次遇到了跨域问题。现在回顾一下各种跨域解决方案,在酷讯无法控制的情况下,这个问题依然是无解的(或许通过加入信任站点?)。好在当时也没有纠结太久,就转向了另一个方案。

通过XHR获取页面的内容,然后解析文本。大家马上会想到,依然会有域名大山存在,不过幸运的是,在IE6里边,从文件系统直接打开本地html文件,在允许脚本运行后,是可以发送跨域XHR请求并拿到响应体的。基于这个事实,后面的一切就简单的多了,通过XHR获取数据,然后把数据抽取出来结构化,过一段时间再抽取一次,做比较,有新的,弹出alert提示。

【Firefox GreaseMonkey插件 脚本潜入】
到07进入阿里,不再做IEOnly,开始接触兼容性开发。我发现了Firefox非常牛X的插件GreaseMonkey,传说中的“油猴”。GreaseMonkey的作用就是可以指定在某种类型的url中,自动潜入一个本地脚本运行。这相当于在我的浏览器里我可以控制其他域名的网页了。所以在08年,刷票脚本的技术方案改为脚本潜入。相对与前一个方案,这个方案因为可以直接访问对方页面的Dom树,不用解析文本,而且从之前分析prototype.js源码得知Firefox浏览器还支持XPath,XML里类似CSS选择器,一下子获取数据变得容易且稳定许多。

后来油猴成为了我的大玩具,最成功的插件是开心网停车脚本,全自动停车,十分钟换地方,想贴条那是没门。当然还有自动贴条脚本,太伤人品,没有扩散,呵呵。

【GreaseMonkey本地存储和GlobalStorage】
改为脚本潜入也不是一点障碍没有,在跨域XHR方案中,多次获取的页面数据统一在内存中,比较起来非常方便。而改为脚本潜入的模式的V3.0,每次刷新页面,如何保持数据成了一个重要问题,存在cookie中有些丑陋,而且暴露给对方服务器了。好在GreaseMonkey插件提供了本地存储功能,用它记录前一个页面的信息,以备后面比较。我不记得API是什么了,暂且叫他GMStorage吧,和Html5本地存储接口差不多。而在09年的v4.0我就直接使用了本地存储,当时还叫GlobalStorage,而不是LocalStorage。

【GreaseMonkey的安全改进DomWrapper】
GreaseMonkey越来越流行,其潜在的安全问题也是巨大的,随意安装GM脚本,你的所有网页浏览行为,键盘输入都可能被监听记录。
09年V4.0开发时,我发现油猴做了一些改变,油猴脚本里拿到的document,不在是真是的document,很多操作变的没有效果。
这必须Hack一下,我尝试了几种办法,发现在油猴脚本里边使用DomScriptElement方法创建一个script节点,另载入一个外部脚本,另外一个脚本的运行不受任何GM的安全限制
其实我觉得GM的DomWrapper还不如不做,它迫使人们引入另外一个远程脚本,也使得脚本开发者更容易的通过改变另外一个脚本的内容神不知鬼不觉的做些坏事。

【酷讯的变化:从堵到疏】
记得07年阿里第一届网侠大会,酷讯的哥们分享他们如何爬到数据,就神秘的提了一下,借助前端脚本抓取,我在下边听着暗笑~,大家手法是一样一样一样的啊。
随着年复一年的口碑相传,用酷讯淘票的人越来越多。我估计类似我的小脚本的各式各样工具也越来越多。面对这类问题,酷讯明显的经历了一个由堵到疏的过程。
某一年,酷讯在请求时带上了两个参数,记录鼠标点击位置相对搜索按钮左上角的像素差。
某一年,酷讯不再使用顺序的id,每条信息的ID都是一个随机串,这样判断是否有新信息变得麻烦。

但是客户端没有秘密而言,这些小手段都可以被轻易化解,估计效果并不是很好。

再后来酷讯可能也注意到没有太好的办法堵,就改为疏导,改为本身提供这类自刷新功能,有新信息气泡提示,这样方便的控制刷新频率(似乎间隔越来越长),降低服务器的压力。

在10年的V5.0中,脚本只是简单的控制自刷新频率,做更醒目的提示。且更多的利用本地存储,记录以往的搜索信息供比对。

【Bookmarklet 脚本潜入】
我最早发现Bookmarklet应用是CSDN的一个转帖插件,Bookmarklet的核心是构造一个连接,连接内容是javascript:伪协议,把这个链接拖入收藏夹,在任意页面上点击这个连接,都会运行js为协议里包含的脚本内容,脚本内容常常是通过DomScriptElement引入一个远程脚本,这样也达到了脚本潜入的目的。这个技术后来被广泛应用于各种云输入法当中而被大家熟知。
因为Bookmarklet不限制浏览器,酷讯提供了Ajax获取新信息接口(不用刷整个页面),IE8支持了LocalStorage,10年的V5.0版本脚本即支持GM也支持BM,刷票脚本再次回归IE怀抱。不过BM需要每次点一下,这个还是比GM要麻烦一点点。


【其他网站的分流】
11年的V6.0是脚本效果最差的一年,因为酷讯的效果感觉不那么即时了,58这类的网站分流了酷讯的客流。今年大家都不用做这一块了,不过真心希望业界丰富建站经验的高手们,能够承担12306.cn的建设工作,这个站的体验和稳定性太次了,其实俺觉得包给淘宝做就挺好,呵。

前面就是这几年写刷票脚本的流水账,不用再做了,大家都释然吧。
特别感谢酷讯,多年来行善举造福大家。
祝新老朋友今年顺利拿到平价车票,开开心心过大年。
分享到:
评论

相关推荐

    春运抢票神器 回家过年

    首先,抢票神器通常是一种利用自动化技术来帮助用户更高效地在购票网站上刷票的工具。在春节这个人口大规模流动的时期,即所谓的“春运”,火车票需求量激增,抢票变得异常激烈。传统的手动刷新购票页面的方式往往...

    人生日历订票全新改版,刷票捡漏更给力.docx

    随着春节的脚步临近,一年一度的春运抢票大战进入高潮。在这个关键时刻,人生日历推出了全新的订票系统,旨在为用户带来更为高效、便捷的抢票体验。这次改版不仅优化了抢票流程,还提升了系统的自动化程度,使用户在...

    2021年1月16日人生日历怎么抢票?.docx

    2021年1月16日,12306官网开始发售春运临客车票,这时人生日历的抢票功能就显得尤为实用。以下是关于如何使用人生日历进行抢票的详细步骤和特点: 首先,你需要下载并安装人生日历应用。在应用中,你会看到右下角有...

    火车票捡漏软件如何使用.docx

    人生日历在过去的春运中已经证明了其在抢票功能上的优越性,用户可以通过该软件进行高效、便捷的抢票操作。在使用人生日历之前,确保你已经下载并安装了最新版本的软件。 接下来,按照以下步骤设置和使用人生日历的...

    多途径抢票才是王道.docx

    标题中的“多途径抢票才是王道”暗示了在抢购火车票,特别是春运期间,单纯依赖单一方式可能无法成功,因此需要采取多种策略和工具来增加购票成功率。描述中提到12306官方网站在高峰期经常出现问题,这强调了需要...

    捡漏票抢返程票,人生日历火力全开.docx

    本文将深入探讨如何通过人生日历应用,提升抢购火车票的成功率,特别是春节期间的返程票,从而确保每个人都能在一年中最繁忙的时刻,顺利回到心之所属的地方。 春节,这个中国最重要的传统节日,每年都会带来一场...

    百度卫士抢票宝 v6.3.zip

    百度卫士抢票宝是百度卫士针对2014、2015春运购票推出的最新抢票软件,百度卫士抢票宝能够全自动操作,智能识别验证码,最大程度提升抢票效率。 百度卫士抢票宝功能介绍: 独创多进程 多服务器同时刷票,零缓存...

    史上最长预售期来临,人生日历助力您抢票.docx

    2021年春运期间,为了更好地满足广大旅客的出行需求,12306官方平台宣布提前至60天预售火车票。这一举措意味着乘客可以更早地规划行程,同时也对抢票策略提出了新的挑战。对于需要返乡过年的朋友来说,如何在竞争...

    12306抢票助手如何使用.docx

    随着春节的脚步日益临近,一年一度的春运抢票大战也拉开了序幕。对于大多数人来说,能否顺利买到一张回家的车票成为了摆在眼前的难题。为了帮助大家在购票高峰期能够更加轻松地抢到心仪的车票,一款名为“12306抢票...

    2014-01-12友科订票助手V2.3.40发布,增加日期轮流查询功能!12306完全免费

    【友科订票助手V2.3.40】是一款专为解决中国铁路12306官网购票难题而设计的软件,它在2014年1月12日发布了这一重要更新,版本号为V2.3.40。这次更新的主要亮点在于新增了“日期轮流查询”功能,这使得用户在抢购火车...

    360抢票王三代抢票攻略.docx

    随着春节脚步的临近,对于许多人来说,一年一度的抢票大战已经悄然打响...希望本文所提供的360抢票王三代抢票攻略能够帮助大家在接下来的春运抢票大战中,都能够顺利地抢到属于自己的那张车票,顺利返乡,与家人团圆。

    木鱼订票助手(4.3.1)+猎豹浏览器抢票专版

    在互联网时代,尤其是在中国的春运期间,火车票的抢购成为了一项技术和策略的比拼。"木鱼订票助手(4.3.1)+猎豹浏览器抢票专版"的组合,便是这一领域中的利器,其强大的功能为用户提供了极大的便利。2013年1月20日...

    抢票必备登录助手

    在IT行业中,抢票软件是针对热门活动或节假日出行需求而设计的一种工具,尤其是在春运、假期旅游等高峰期,人们为了能提前购买到火车票、飞机票等,常常会使用这类软件来提高购票的成功率。"抢票必备登录助手"正是...

    12306 自动订票

    这类程序通常会模拟用户的操作行为,节省用户手动操作的时间,尤其在春运等高峰期,能极大提高购票效率。 描述提到了该程序是用Delphi XE2开发的初版测试版,这意味着它使用了Embarcadero公司的集成开发环境(IDE)...

    火车票订票插件,支持自动提交订单

    这种技术在高峰期,如节假日或春运时尤其实用,因为大量的购票需求往往导致网站访问量激增,手动购票可能因网络延迟或操作速度慢而错失购票机会。 首先,我们需要理解插件的工作原理。它通常基于JavaScript编程语言...

Global site tag (gtag.js) - Google Analytics