Press "Enter" to skip to content

东方时尚约车脚本(greaseMoney)

因为东方时尚改版, 请参看约车脚本2.0
约车辛苦啊, 不停的刷新。。。
刚看到有车, 一点又没了,,,
愤怒之下, 写了个自动刷新脚本, 自动帮你约车.
可以定义多个需要预订的时段~~
脚本可以无人值守...
享受吧~~ 呵呵
安装地址: dffs booking script
代码如下:

// ==UserScript==
// @name           dffs_booking_script
// @namespace      dffs.booking
// @include        http://yueche.dfss.cn/web/cmp/yc.aspx?StudentID=0942978
// @version		   1.0.3
// @author		   laruence<laruence at yahoo.com.cn>
// @copyright	   Copyright (c) 2009  laruence , All rights Reserved
// ==/UserScript==
//
/**
 * monday = 1, sunday = 0
 * 7:00-9:00 = 1, 19:00-21:00 = 5 ,
 * [ [5, 5], [6, 1] ] 的意思是, 我要预约星期5晚上19点到21点,
 * 和星期六7点到9点,
 * 修改这个为你想要的时段吧
 */
var expect_period = [
[6, 1], [6, 2],
[0, 1], [0, 2], [0, 3], [0, 4],[0, 5]
];
//每次请求之间的延迟, 不用太短, 机器会郁闷的。
var delay = 10; //5秒
//
var START = true;
var delegate = function(expect_period) {
	var day_map 	= ['日', '一', '二', '三', '四', '五', '六'];
	var period_map	= ['7-9', '9-13', '13-17', '17-19', '19-21'];
	var url			= window.location.href;
	var book_day 	= [];
	var book_period = [];
	var self		= this;
	var time		= new Date();
	var today		= time.getDay();
	for ( var key in expect_period ) {
		book_day[key]  	  = day_map[expect_period[key][0]];
		book_period[key]  = period_map[expect_period[key][1] -1];
	}
	if( typeof delegate.__initilized__ == 'undefined' ) {
		delegate.prototype.init  = function(flag) {
			var x = document.createElement("div");
			var btn = null;
			x.id = "m-btn-o";
			x.innerHTML = "<style>#m-btn-o{border:solid 2px red;background-color:#ccc;left:740px;top:110px;position:absolute;}</style>";
			document.body.appendChild(x);
			if ( flag ) {
				x.innerHTML += "<button id='m-btn'>开始约车</button>";
				btn = document.getElementById("m-btn");
				btn.addEventListener("click", function() {
						window.location.replace(url + '&automatic_booking=1');
				}, false);
			} else {
				x.innerHTML += "<button id='m-btn'>停止</button>";
				btn = document.getElementById("m-btn");
				btn.addEventListener('click', function() {
							window.location.replace(url.replace('&automatic_booking=1', ''));
						}, false);
				setTimeout( function() {
					self.start();
				},  2000);
			}
		}
		delegate.prototype.start = function() {
			/*
			GM_xmlhttpRequest( {
				method : "GET",
				url : url,
				onload : function(o) {
					var text = o.responseText;
					self.isAvailable(text);
				},
				onerror : function(e) {
					GM_log("Error occurred");
				}
			});
			*/
			var text = document.getElementById('gridgrid_div').innerHTML;
			self.isAvailable(text);
		}
		delegate.prototype.isAvailable = function(text){
			for ( var i=0, l=expect_period.length; i<l; i++ ) {
					var expect_day	= expect_period[i][0];
					expect_day		= ((expect_day - today) + 7) % 7;
					var id = "grid_grid_ci_0_" + expect_period[i][1] + "_" + expect_day	+ "_imgButton";
					var input = null;
					if( (input = document.getElementById(id) )
							&& input.src.indexOf('02.gif') != -1 ) {
						/**
						 * igtbl functions
						 * defined in ig_WebGrid.js line 2477
						 */
						var grid = unsafeWindow.igtbl_getGridById('gridgrid');
						var cellId = "gridgridrc_" + expect_day + "_" + expect_period[i][1];
						var cell   = unsafeWindow.igtbl_getCellById(cellId);
 						grid.setActiveCell(cell); // important
						var evt = document.createEvent("MouseEvents");
						evt.initEvent("click", true, true);
						input.dispatchEvent(evt);
						return true;
					}
				}
				url	+= (url.indexOf("automatic_booking") != -1) ?  '' : '&automatic_booking=1';
				window.location.replace(url);
		}
		delegate.__initilized__ = true;
	}
}
window.addEventListener('load',  function() {
	var agent = new delegate(expect_period);
	if ( window.location.href.indexOf('automatic_booking=1') != -1 ) {
		agent.init(!START);
	} else {
		agent.init(START);
	}
}, false);

使用方法, 使用firefox, 并且安装greaseMonkey插件。 对这个不明白, 可以问问google, 他知道.

16 Comments

  1. 雷恩
    雷恩 November 28, 2009

    看到大哥的贴子相当兴奋,心想总算看到了约车的希望了。可是俺是新手,不会玩这么高的技术,能不能送佛送到西,再详尽一点?我已经装了插件,也安装了脚本(点击了您提供的地址),接着应该是要改代码了吧?就这一步不会…

  2. 雪候鸟
    雪候鸟 November 27, 2009

    @tangtang dfsf改版了,,我也没有账户可以测试修改… 所以不能用了.

  3. tangtang
    tangtang November 26, 2009

    怎么我用了也没效果呢?还请赐教呀!!

  4. Fisher
    Fisher July 28, 2009

    老大?为啥我测试了2.0-3.0-3.5三个版本的FF,始终没有见到过其自动刷新的效果呢?多谢,敬请指教:)
    yuningilike@163.com

  5. Anonymous
    Anonymous May 13, 2009

    能写个自动打电话的吗

  6. toms
    toms May 12, 2009

    而且也不光用户首页部分,站点还有很多地方都会使用

  7. toms
    toms May 12, 2009

    雪大侠:我问个东西
    就是一个sns站, 它的用户首页有好友列表,好友生日, 用户群组等东西, 其中有一部分很少变动(都在同一个页面)的部分我打算生成局部静态html页面,每隔一段时间更新或由用户动作触发更新,以用户首页来说如果有三个页面模块需要静态化, 那么就要生成3个静态文件,如果有40w用户,基本上就有40,0000*3个静态页面, 这么多文件在文件系统中如何处理, 如果采用hash路径, 那么一个目录下的子文件数(不知道子文件中的文件数对访问当前文件夹下的文件有没有速度影响)不超过多少才不会影响文件系统访问速度?
    第二种方法就是用memcache缓存数据查询结果,然后直接在视图中使用mem缓存结果而也不用查询数据库,哪个快点啊?
    谢谢!

    • 雪候鸟
      雪候鸟 May 12, 2009

      我觉得用cache会比较好一些, 第一种方式也许我没太看懂, 直观上觉得,这么多文件, 是比较费力的.

      • toms
        toms May 12, 2009

        第一种方式就是,在用户首页有很多模块:最近访问,好友列表,我加入的群组,个人基本信息。。。
        , 其中“我的好友”, “我加入的群组”是很少更新的那么在被访问了一次之后生成:myfriends.html, mygroup.html, 以后访问用户首页的时候对于“我的好友”和“我的群组”就直接读上面的生成的静态文件, 但由于每个用户的好友列表和群组是不一样的, 所以就要为不同的用户生成不同的html, 这样如果有10w用户数,那么缓存的静态文件就可能是10, 0000*3个,这么多文件怎么处理,我按用户id md5出3级目录存放它们有没有效率上的问题,就是会不会由于文件数太多反而访问缓存文件的速度还不如访问数据库
        ———————————-
        谢谢

        • 雪候鸟
          雪候鸟 May 12, 2009

          首先, 你这样的静态化的思路出发点就不对, 一般来说, 静态化应该是说对于所有的用户(起码不会每个用户都一份)都一样的部分静态化.
          我个人更支持你使用缓存. 由用户更新来促使缓存失效. 这个速度会快于你管理如此大的文件数目的速度.

        • toms
          toms May 12, 2009

          嗯好的,谢谢啊。。。。

  8. 晓易
    晓易 May 11, 2009

    这个不错。不过电话预约早7点就开始了,网络预约是9点后,好时间段基本已经约满。只能寄希望于有人取消预约。

    • 雪候鸟
      雪候鸟 May 12, 2009

      现在学成的人太多了`

Comments are closed.