我需要编写一些脚本来访问一些网站。从命令行运行的脚本将获取一些页面,提交一些表单,屏幕抓取一些信息等。
它不能真正像libwww-perl那样成为一个库“浏览器”,因为某些步骤可能需要用户交互(验证码,仅使用Ajax的表单,任何交互惊喜等)。
我能想到的最实用的方法是远程在Firefox中打开一个选项卡,并向其中注入JavaScript代码,类似于Greasemonkey和Selenium所做的事情。如果更容易的话,它不一定非得是Firefox,可以是其他浏览器。
那么最好的方法是什么?
我需要编写一些脚本来访问一些网站。从命令行运行的脚本将获取一些页面,提交一些表单,屏幕抓取一些信息等。
它不能真正像libwww-perl那样成为一个库“浏览器”,因为某些步骤可能需要用户交互(验证码,仅使用Ajax的表单,任何交互惊喜等)。
我能想到的最实用的方法是远程在Firefox中打开一个选项卡,并向其中注入JavaScript代码,类似于Greasemonkey和Selenium所做的事情。如果更容易的话,它不一定非得是Firefox,可以是其他浏览器。
那么最好的方法是什么?
你考虑过使用Selenium远程控制吗?我以前使用过这个工具来自动化浏览器交互,效果非常好,提供了很多灵活性。
根据您的确切需求,您可能可以利用Selenium IDE,这是一个易于使用的Firefox插件,允许轻松编写脚本。
我不确定做这件事的“最佳”方式是什么,但一个可能的方法是使用AppleScript。然而,Firefox没有广泛的脚本功能 - 如果您愿意使用Safari,则可以使用一个可用的AppleScript命令将JavaScript代码注入文档中(do JavaScript
命令 - 从Script Editor中可用的Safari脚本字典中查找)。
此外,为了从命令行运行AppleScripts,请使用osascript
:
osascript path/to/script.scpt
在 OS X 上编写脚本有两种方法我会推荐,它们都是用 Ruby 编写的。第一种是 Watir,这是一个自动化测试框架,可以控制 Mac OS X 上的 Firefox 和 Safari。
另一种更好的屏幕抓取方式可能是使用 hpricot,这是一个非常易于使用的 HTML 解析器。
在后台,Watir 使用 JSSh - a TCP/IP JavaScript Shell Server for Firefox 来实现。JSSH 允许您从 telnet 会话中控制浏览器。
无论您选择哪种方式,如果有验证码,它们都会阻止您。这似乎是它们的全部意义 :-)