2009年4月28日星期二

Web机器人的作用及其实现

Web机器人有什么作用呢?它不但可以实现定时登录网站,还可以用于提高测试Web站点时的效率。当然,任何事物都有两面性,有不少站长利用Web机器人作弊以骗取广告商的广告费。目前Web机器人的实现主要有以下几种:

(1) JavaScript

在网站设计模型的行为层,各浏览器对ECMA标准的JavaScript提供了良好的支持。由于 JavaScript使用了文档对象模型——DOM 和浏览器对象模型——BOM,所以使用JavaScript构建Web机器人非常的方便。要注意的是:出于安全性考虑,JavaScript 不能访问和操作本地计算机文件,因此我们无法做到诸如登录站点后自动下载文件之类的功能。与JavaScript 有关的 Web机器人有:

  • zope.testrecorder:它用于记录浏览器事件以及测试断言 (简单来说断言是指:这里的文本框应含有这段文字,那里的复选框该不该被选中等)。必须首先安装 Web Server——Zope ,再访问 zope.testrocoder,最后输入任意的URL即可开始进行记录测试。不过安装和配置 Zope非常的复杂。它需要结合Selenium(一个开源的 Web 测试框架)或者 zope.testbrowser一起使用。
  • JsUnit:用于测试静态HTML文档以及生成的HTML文档,它不能与Web Server进行交互。

(2) 控制浏览器

IE浏览器与Firefox浏览器均提供了编程接口,外部程序何以通过编程接口控制浏览器的行为。

  • MSDN为开发人员提供了IE浏览器的COM接口以及如何用VB控制IE浏览器范例。pywin32 用Python封装了COM等机制,因此使用 Python控制IE浏览器同样是没有问题的PAMIE 还对pywin32进行了进一步的封装,使得控制IE浏览器更加方便快捷。关于如何使用Python进行COM编程,请阅读《Python Programming on Win32》一书。此外,该书的第21章:Active Scripting还详细介绍了如何将Python嵌入IE浏览器(出于安全性考虑,嵌入的Python不允许导入任何模块,因此使用Python并不能实现比JavaScript更多的功能)。有一点要注意:IE浏览器7.0及其以上版本默认是不允许COM控制的,需要进行如下设置:Tools --> Internet Options --> Security --> Security for this zone 设置成Medium。
  • XPCOM是访问Gecko库、嵌入以及扩展Gecko的好方法。PyXPCOM封装了XPCOM机制。FireFox浏览器等使用Gecko作为 Web排版引擎,因此能够通过XPCOM进行控制。这方面资料非常的少,目前在Google上还搜索不到通过PyXPCOM控制Firefox浏览器的资料。

(3) 模拟浏览器

虽然使用JavaScript和JavaApplet能够比较好的模拟浏览器的重定向、表单和Cookie等行为,但是对于Frame、DOM访问等行为就很难模拟了。那么有什么好的实现方法呢?请看下面(按照模拟能力顺序排列):

  • HttpUnit(使用Java实现,需要配合JUnit):支持基本的HTTP认证以及简单的JavaScript。
  • zope.testbrowser 这是是一个可以脱离Zope而单独使用的Zope组件。支持简单DOM (含表单)、Cookie以及定制的HTTP请求。
  • WebUnit(使用Python实现,需要配合 PyUnit):DOM方面只能支持表单,其他模拟能力和zope.testbrowser基本差不多。
  • twill(Python实现):其模拟能力与WebUnit基本一样。
  • 使用Python 3的标准模块urllib(这是一个基于更底层的http.client模块)同http.cookiejar 等配合以支持基本的定制HTTP请求和Cookie。使用标准模块html.parser解析HTML时,有可能需要python-utidylib来做HTML的整理。在《Python Cookbook》的第14章Web Programming中还描述了控制IE浏览器、使用HTTPS等技术。)

(4) 宏记录 鼠标点击的坐标和时间 然后重放

这个实现受到Web网页变化的影响非常的大,而且测试的逻辑并不明确,所以非常难以维护。