我需要编写一些访问某些网站的脚本。来自命令行的脚本会获取一些页面、发布一些表单、屏幕抓取一些信息等。
它不能真正成为像libwww-perl这样的库“浏览器” ,因为某些步骤可能需要用户交互(验证码、仅Ajax表单、任何交互意外等)。
我能想到的最实用的方法是在 Firefox 中远程打开一个选项卡,然后将 JavaScript 代码注入其中,这有点像Greasemonkey和Selenium所做的。它不一定必须用于 Firefox,如果更容易,它可以是不同的浏览器。
那么最好的方法是什么?
我需要编写一些访问某些网站的脚本。来自命令行的脚本会获取一些页面、发布一些表单、屏幕抓取一些信息等。
它不能真正成为像libwww-perl这样的库“浏览器” ,因为某些步骤可能需要用户交互(验证码、仅Ajax表单、任何交互意外等)。
我能想到的最实用的方法是在 Firefox 中远程打开一个选项卡,然后将 JavaScript 代码注入其中,这有点像Greasemonkey和Selenium所做的。它不一定必须用于 Firefox,如果更容易,它可以是不同的浏览器。
那么最好的方法是什么?
您是否考虑过Selenium 遥控器?我之前使用该工具自动进行浏览器交互,它运行良好,提供了很大的灵活性
根据您的具体需求,您也许可以利用Selenium IDE,这是一个易于使用的 Firefox 插件,可以轻松编写脚本。
您可以使用XPCOM以各种可以想象的方式扩展 Firefox。您可以编写某种与另一个进程连接的接口。
我不确定“最好”的方法是什么,但一种可能性是使用 AppleScript 来完成这项工作。然而,Firefox 没有广泛的脚本功能——如果你愿意使用 Safari,可以使用 AppleScript 命令将 JavaScript 代码注入到文档中(该do JavaScript命令在 Safari 的脚本字典中查找,可从脚本编辑器中获得)。
此外,为了从命令行运行 AppleScripts,请使用osascript:
osascript path/to/script.scpt
要在 OS X 上编写脚本,我推荐两种方法,它们都使用 ruby。第一个是Watir,它是一个自动化测试框架,可以控制 Mac os x 上的 firefox 和 safari。
另一种可能更好的屏幕抓取方法是使用hpricot,它是一个非常易于使用的 html 解析器。
在后台,Watir 使用 JSSh - 一个用于 Firefox 的 TCP/IP JavaScript Shell 服务器来执行此操作。JSSH 允许您从远程登录会话控制浏览器。
无论你走哪条路,如果有追捕者,他们都会阻止你。这就是他们的重点:-)