昨晚公司开颁奖晚会(日子选的很别扭),偶们改的状态会实时显示在状态墙上.彩排完毕超市购物间隙跟强哥想到一个恶搞的方法–刷屏.具体来说就是用偶们几个人滴号不停的改状态刷状态墙.于是立刻找到一个网吧实施罪恶的行为
.
我写脚本,强哥写用来刷屏的状态,额,用shell改状态就两句话,不过放在公司的机器上,没办法,还得现查curl,最终在入场之前还是把脚本写完了…
#!/bin/sh
#所有的状态放到status.txt中,然后用这个函数循环取
get_status()
{
#取第一行状态
head -1 status.txt
#第一行移动到最后一行
sed -i -e '1{h;d};$G' status.txt
}
#该状态的函数,两个参数:用户名,密码
send_status()
{
user=$1
pass=$2
word="`get_status`"
word="`perl -MURI::Escape -e "print uri_escape('${word}');"`"
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -D /tmp/cookies -d "email=${user}&password=${pass}" http://login.renren.com/login.do
curl -e "http://renren.com/Home.do" -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -b /tmp/cookies -d "c=${word}&raw=${word}" http://status.renren.com/doing/update.do
}
#main
send_all()
{
while [ "s"="s" ];do
#on_off.txt是个开关文件,如果存在时才会发状态
if [ -e "/tmp/on_off.txt" ];then
#用户名和密码都存在user.txt里
#跟状态一样也是轮着来
u_p="`head -1 user.txt`"
sed -i -e '1{h;d};$G' user.txt
user="`echo "${u_p}" | cut -d: -f 1`"
password="`echo "${u_p}" | cut -d: -f 2`"
#改状态了
send_status $user $password
fi
#五秒钟发一次
sleep 5
done
}
send_all Copy Code
脚本写完了,但是怎么启动呢,我的手机上有个putty,但是登server太慢了,于是又写了一个开关的php
<?php
if(file_exists('/tmp/on_off.txt'))
{
unlink('/tmp/on_off.txt');
}
else
{
$fp = fopen('/tmp/on_off.txt', 'w');
fwrite($fp,'ooxx');
fclose($fp);
}
?> Copy Code
这样就比较方便了,shell在server上运行,只要用手机浏览器访问这个开关的php就可以了~
后来使用中遇到点问题,手机浏览器的缓存实在太强了!!!!!!
第n次火星了,可是依然没去过火星.
这个是最近用到才知道,需求是替换onclick属性中的关键字,但是俺单纯的以为geAttribute都会返回一个字符串给我,没想到ie又一次显示了它独到的见解~
<html>
<p id="test" onclick="alert('click');">click me~</p>
<script>
document.write('<pre' + '>');
var el = document.getElementById('test');
var at = el.getAttribute('onclick');
document.writeln(at);
document.writeln(typeof at);
document.write('</' + 'pre>');
</script>
</html> Copy Code |
Run Code
ff下输出
alert('click');
string
ie6和ie7下输出:
function anonymous()
{
alert('click');
}
function
ie8下输出:
function onclick()
{
alert('click');
}
function
其他事件属性肯定也会有同样表现,ie8十分搞笑,换了一个函数名…
最后对于ie我只有这样了:
<html>
<p id="test" onclick="alert('click');">click me~</p>
<script>
var el = document.getElementById('test');
var at = el.getAttribute('onclick');
//函数换成字符串
at = at.toString().replace(/^function (anonymous|onclick)\(\)\n\{\n(.*)\n\}$/m, '$2');
//替换关键词
at = at.replace('click', 'wahaha');
//再变成函数放回去
el.setAttribute('onclick', new Function(at));
</script>
</html> Copy Code |
Run Code
最近需要把整站js中的域名替成变量,awk查资料写了大半天也没整出个啥,话说我的正则还是太初级,话说我买的正则书也不知跑到哪去了,话说好书还是要放到家里
…
于是还是用python,没有用正则,但是好像跑起来真的比awk快~
脚本下载:replace_keyword.zip
效果:
//替换之前
var s = '<a href="http://blog.abc.com/show">';
//替换之后
var s = '<a href="http://blog.' + siteDomain + '/show">';
Copy Code
使用方法:
首要要修改脚本里要替换的关键词
config['keyword'] = 'abc.com'
config['vname'] = 'siteDomain'
Copy Code
然后
python replace_keyword.py ./myscript.js > /tmp/ooxx
mv /tmp/ooxx ./myscript.js
Copy Code
批量替换的话就需要写个简单的shell:replace_keyword.sh
#!/bin/sh
python replace_keyword.py $1 > /tmp/ooxx
mv /tmp/ooxx $1
Copy Code
批量替换整个目录
find ./ -name "*.js" | xargs -i sh replace_keyword.sh {} Copy Code
最后任务远没有结束,这个脚本还不够强大,它只会替换字符串中的关键字,作为对象属性名称的字符串不会替换,正则中的关键字无法替换,像下面:
var config = {
'blog.abc.com' : 1,
'game.abc.com' : 2
}
//需要手工替换为
var config = {};
config['blog' + siteDomain] = 1;
config['game' + siteDomain] = 2;
if ( /abc\.com/.test(str) ){}
//需要手工替换为
if ( new RegExp( siteDomain.replace('.','\.') ).test(str) ){} Copy Code
所以运行完脚本之后还需要检查未替换的地方,手工完成
find ./ -name "*.js" | xargs grep 'abc\\\?\.com'
Copy Code