喜欢用UNIX的人大都知道UNIX会是一个天然且高效率的工作平台不是没有原因的,纯文字的程式输出入、轻巧又强大的shell、还有适合各种场合的script语言(像是Perl、Python等等)可以把许多小程式非常快速的结合起来完成许多复杂的工作。
但自从web开始蓬勃发展后,越来越多程式和系统开始移到web上。在刚开始的web 1.0时代,大部分网页都是提供资料的静态网页,当时web app也都是用简单的GET、POST参数接收资料后再到server side做处理。因为网页是纯文字的HTML写的,所以在这个时代还有一些人会用scripting语言(像是Perl + WWW::Mechanize)来做网页的自动化处理。但写过这种程式的人都知道,要parse HTML并不是很容易的事,因为大部分HTML都没照标准写,于是只能用regular expression硬来,但无论如何都没办法应付一个最大的问题:只要人家的网页一更新,script当场就变残废…。
到了web 2.0时代,问题变得更严重,因为web app不再是单纯的server side程式;许多网站大量依赖在browser里面执行的javascript,只是抓网页回来而不执行javascript往往无法得到browser里看到的网页内容。
所幸我来MIT后发现我们group开发的一个超棒工具Chickenfoot,不但让使用者能用很简单的指令做到网页自动化,它甚至还像是一个架在browser上的万能shell scripting平台,可以轻易把不同网站的内容和功能连结在一起(就像UNIX shell的pipe一样!)。
Chickenfoot是一个Firefox的extension,可以让人在Firefox上写script全自动操作网页或是修改网页的内容。Chickenfoot乍看之下很像另一个能让人在client端另外插入javascript的Greasemonkey,但实际上Chickenfoot更像一个外挂在browser上的快速scripting平台。
Greasemonkey的目标使用者是会写Javascript程式的网页开发者,也因此它的进入门槛很高,如果是不会看HTML原始码、不了解 DOM或XPATH、不会写Javascript的一般人是没办法用的。另外, Greasemonkey主要的功能偏重在单一网页的客制化上,没有针对网页自动化做的设计,也很难做跨网页的自动化操作。
相反地,Chickenfoot的设计是截然不同的方向:1. 使用者不需要看HTML原始码,只要看网页的画面就能用关键字来锁定画面上的元件,并用简单的指令(例如自动按按钮的click、自动输入文字的 enter、自动选择checkbox的check..等等)自动操作网页;2. Chickenfoot是独立于任何网页之外的平台,可以轻易做到跨网页的自动化操作,甚至可以从网页中提取想要的资料,并带到其他网页中使用。3. Chickenfoot是browser的一部分,所以只要在browser中能看到的页面就能自动操作,不用处理认证或cookie问题。
除了网页的自动化和客制化外,Chickenfoot还有个很有趣的功能:可以把任何Chickenfoot script包装成独立的Firefox extension。也就是说,如果要把script分享给他人不需要请其他人事先安装Chickenfoot,而是直接把「你的」extension给 别人安装就可以了。
我不打算写详细的tutorial,我建议可以从实例来学习,例如Google Icon Search就是一个很好的例子,包含了网页内容的修改、跨网页的自动化、还有基本命令的使用。最近释出的Chickenfoot 1.0.5已经支援Firefox 3.5,并且也修正了中文网页的支援问题,在中文网页上也能正确执行。
另外附带一提,我觉得Chickenfoot中有个很好用的小技巧,但在文件上其实不太容易找到XD 在Chickenfoot的script editor中写script时,每写一行就可以按ctrl-enter来执行「一行」指令。用这种方式就可以很容易一边写script,一边测试并观看 每一行指令的结果,而不用一次写一大堆后再一起测试。
有兴趣更深入了解Chickenfoot的人可以参考官方网站上的Quick Start Guide和Examples,或是直接看看paper: Michael Bolin, Matthew Webber, Philip Rha, Tom Wilson, and Robert C. Miller. “Automation and Customization of Rendered Web Pages”。
没有评论:
发表评论