花瓣采集js解析-greatqn-博客园
2012年01月17日
第一步:收藏夹段js javascript:void(function(d,a,c,b){a[c]&&typeof a[c].showValidImages=='function'?a[c].showValidIma ges():(b=a.createElement('script'),b.id='huaban_scr ipt',b.setAttribute('charset','utf-8'),b.src='http: //huaban.com/js/pinmarklet.js?'+Math.floor(+new Date/1E7),a.body.appendChild(b))}(window,document, '__huaban'));
如果js已经加载,就运行showValidImages()的方法。
没有,则加载js:http://huaban.com/js/pinmarklet.js
对a标签下的img能识别出来。
第二步:提取pinmarklet.js
把线上的js保存到本地huaban.js。
43K,一千多行的代码,经过初步的压缩。
从第一步的效果看,功能是遍历页面,组装成采集页面,再提交采集。
线索:变量"__huaban" var global="__huaban";
document[global]._loaded=!0,
document[global].showValidImages=showImagesAndInit PinBtn
_loaded 初始化标记。
线索:showValidImages方法。
document[global].showValidImages=showImagesAndInit PinBtn
方法1:showImagesAndInitPinBtn 字面意思明显。很好的命名。
var a=getCurrentPageImagesWithEncapsulation();
showImages(a),initPinBtn(a),window.scroll(0,0)
a的数据结构: 方法2:getCurrentPageImagesWithEncapsulation
参数初始
var _document=d||document;eImages=eImages||[],opts=opt s||{};
遍历img 如果img上加上class ImageToPin,就可以跳过被花瓣抓的命运。:)
getVideoOnCustomerPage(_document,eImages);
一些视频的处理。
eImages.push(img)
遍历背景图background-image等。
checkbgimgs
filters
bgimgs
遍历iframes 方法3:function showImages(a)
c.onclick=function(){return pinImage(a),b()};
方法4:function initPinBtn(a){generatePinBtn(),registerImagesForPi nBtn(a)}
方法5:generatePinBtn 生成采集按钮。
方法6:registerImagesForPinBtn(a) 注册鼠标事件。
方法7:取消按钮: 方法8:采集按钮:pinImage
http://www.w3school.com.cn/htmldom/met_win_open.as p 全局参数: var siteDomain="huaban.com",主域
imageRoot="http://"+siteDomain+"/img",图片路径
bookmarkletUrl="http://"+siteDomain+"/bookmarklet/ ",书签路径
domChanged=!1,
selectedText="",
lastScrollY=0,
isShareBtn=!1,
pinBtn=null,
hidePinBtnTimer=null,
currentImage=null,
imageDesc="",
showingImage=!1,
itemUrl="",
skip=!1,
skiphrefs=["http://www.diandian.com/wall"];
技巧1:
(function(){alert("test");})();
定义个方法,直接运行。好处是把一些临时变量圈起来了,不容易和其它代码发生冲突。
技巧2:alert("\u4f60\u73b0");
js文件里,避免出现中文。
技巧3:!0 代替 true
技巧4:|| && 语法。
基础方法:
function isIE(){return/msie/i.test(navigator.userAgent)&&!/ opera/i.test(navigator.userAgent)}
function isSafari(){return/Safari/.test(navigator.userAgent )&&!/Chrome/.test(navigator.userAgent)}
function isPinable(a) 判断是否局域网地址。
function generateTag(a,b){var c=document.createElement(b||"div");return c.id=global+"_"+a,c}生成一个节点。
正则表达式:
http://hzjavaeyer.group.iteye.com/group/wiki/2276- JavaScript-Core
看js代码,用的是MyEclipse,有括号对应功能。
存疑:代码里用了大量的','号。不知道和';'号比,有什么优势。
发表评论
-
【援引】中考酡语语法总温虾讪项实战练习练习
2012-01-20 11:34 694【援引】中考酡语语法总温虾讪项实战练习练习 2012年01月 ... -
linux下程序开发-复合语句及输入输出.笔记
2012-01-20 11:33 858linux下程序开发-复合语句及输入输出.笔记 2010年0 ... -
javascript异常处理-乾蓝洛-博客园
2012-01-19 16:25 453javascript异常处理-乾蓝洛-博客园 2011年10 ... -
转载:全面介绍javascript异常处理(try…catch…finally window.onerror)
2012-01-19 16:25 535转载:全面介绍javascript异常处理(try…catch ... -
《JavaScript高级程序设计》学习笔记――错误处理与调试
2012-01-19 16:25 649《JavaScript高级程序设计》学习笔记――错误处理与调试 ... -
ecshop transport.js/run() error:undefined
2012-01-19 16:25 718ecshop transport.js/run() error ... -
Handling metadata and cue points in Flash video(AsyncErrorEvent text=Error #2095 flash.net.NetStream)
2012-01-19 16:25 913Handling metadata and cue point ... -
小学生作文教学生活化
2012-01-17 06:08 570小学生作文教学生活化 2010年07月22日 小学 ... -
如何提高小学生写作文的能力
2012-01-17 06:08 695如何提高小学生写作文 ... -
提高小学生作文能力的几种基本方法
2012-01-17 06:08 613提高小学生作文能力的 ... -
小学生作文训练
2012-01-17 06:08 484小学生作文训练 2011年0 ... -
2011、一切已成为神马、不再浮云
2012-01-16 04:50 5722011、一切已成为神马、 ... -
成绩神马的是浮云对不对
2012-01-16 04:50 601成绩神马的是浮云对不对 2012年01月13日 今天是1 ... -
神马都是浮云~ ~我们的第一个学期
2012-01-16 04:49 569神马都是浮云~ ~我们的第一个学期 2012年01月13日 ... -
神马都是浮云是不是好题目
2012-01-16 04:49 496神马都是浮云是不是好题目 6小时前 喜欢一个人听喜欢的歌 ... -
神马都是浮云
2012-01-16 04:49 508神马都是浮云 2011年12月31日 那一年还没有猫扑 ...
相关推荐
开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.docx开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.docx开源的搜索引擎工具包和web搜索引擎系统 - austin lius ...
开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.pdf开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.pdf开源的搜索引擎工具包和web搜索引擎系统 - austin lius ...
ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园
【转】c# xml添加 删除 修改数据 - badnewfish - 博客园.htm【转】c# xml添加 删除 修改数据 - badnewfish - 博客园.htm【转】c# xml添加 删除 修改数据 - badnewfish - 博客园.htm【转】c# xml添加 删除 修改数据 -...
写在前面最近由于公司需要,所以就做了个基于SWD协议的离线烧写器。由于过程中参考了很多大最近由于公司需要,所以就做了个基于SWD协议的离线烧写器。由于过程中参考
C# 绘制统计图(柱状图, 折线图, 扇形图) - steven_2005 - 博客园
推荐--jQuery使用手册 - 仰天一笑 - 博客园
Spring.NET学习笔记 - 刘冬.NET - 博客园
QVector常见使用方法 - 浅浅念 - 博客园随笔- 68 文章- 0 评论- 14博客园 首页 新随笔 联系 管理 订阅QVector常见使用方法仅在此简
Entity Framework 6 Recipes 中文翻译系列-By博客园-china_fucan
1.配置引脚作为输出 2.如果检测输出的是高电平则输出电平,如果检测输出的 3. ESP8266刷AT固件与node 4. 用ESP8266+android,制
Qt 格式化字符串 - Avatarx - 博客园博客园首页新随笔联系管理订阅随笔- 1695 文章- 0 评论- 3Qt 格式化字符串Qt字符串格式化性能比较
Linux静态库和动态库 - feisky - 博客园.mht
AjaxPro使用说明 - lexus - 博客园 Ajax是异步Javascript和XML(Asynchronous JavaScript and XML)的英文缩写。"Ajax"这个名词的发明人是Jesse James Garrett,而大力推广并且使Ajax技术炙手可热的是Google。Ajax的...
CobaltStrike去除流量特征 - CoLoo - 博客园1
转ibatis动态sql - phoebus0501 - 博客园.mht
IOS开发系列—Objective-C之Foundation框架 - KenshinCui - 博客园.pdf
scrapy-redis搭建分布式爬虫环境 - 温良Miner - 博客园1
JAVA多线程实现的四种方式 - FelixZh - 博客园1
Entity Framework试水系列-博客园cnblogs.rar