谢谢truncatei分享,你提供的这个包,和我需要的功能类似, 其实就是让Perl可以和浏览器的API进行通信,我看了WWW::Mechanize::Firefox这个包其实是和Firefox安装 MozRepl插件后启动的端口进行通知 提交一个Url,获取到Firefox访问这个Url返回的结果。并且包含了status_line等信息,挺实用的 不过还存在一个问题, 使用WWW::Mechanize::Firefox模块后,返回的内容其实和在Firefox输入网址一样了。 但是Firefox默认对wml站点支持不了,安装了Wmlbrowse插件后,可以支持访问Content_type为wml的站点,但是对于这些站 点上的Oneterforward并不会自动跳转, 会停留在跳转页面上,需要你去点击"点击进入"这种链接后才会到达最终页面,是否有办法可以让这个Content_type为wml的网站自动跳转到最 终地址?
附上自己测试的过程记录 Perl如何实现和Firefox API通信 一、如何开放Firefox浏览器的API 系统版本:winxp 32Bit Firefox版本:3.6.21 MozRepl版本:1.0 1、安装MozRepl插件 首先在一台安装了Firefox的winxp机器(理论上Linux机器也可以)使用Firefox访问下面MozRepl插件的下载地址 https://github.com/bard/mozrepl/wiki 下载好能支持Firefox的版本后,会要求重启Firefox 2、启动MozRepl插件的服务,开启Firefox的API 在Firefox的工具选项中点击MozRepl这个菜单,有三个会用到的功能 Start【启动功能,点击默认会在本机开启一个127.0.0.1:4242的端口】 Activate on Startup【开启Firefox时就自动启动】 Allow Outside Connections【允许所有访问,将4242端口监听在0.0.0.0上】 3、测试Firefox的API是否启动成功 telnet 127.0.0.1 4242 如果有一个MozRepl的提示信息,就说明Firefox的API已经启动成功 二、Perl如何访问Firefox的API 1、在环境变量中配置Firefox API所监听的地址和端口 如果不在这里配置MOZREPL的地址,下面安装WWW::Mechanize::Firefox模块时,就会提示连接到locahost 4242失 败, 因为默认会认为Firefox API监听地址为本机 export MOZREPL="192.168.20.235:4242" 2、安装Perl所需要的模块WWW::Mechanize::Firefox 通过这个模块,可以实现Perl和Firefox MozRepl插件实现的API接口通信 使用cpan安装WWW::Mechanize::Firefox模块 cpan WWW::Mechanize::Firefox 3、Perl和Firefox API通信的范例脚本 #!/usr/bin/env perl use strict; use warnings; use Data::Dumper; use WWW::Mechanize::Firefox; my $url = shift; # 如果没在环境变量是配置,也可以直接在Perl脚本中定义 # $ENV{MOZREPL} = "192.168.20.235:4242"; my $mech = WWW::Mechanize::Firefox->new(activate => 1,); $mech->get($url); print $mech->content . "\n";; print $mech->status . "\n";; On 9月3日, 上午11时43分, truncatei <[email protected]> wrote: > 曾经看到这么一个包,希望对你有帮助 > > http://search.cpan.org/~corion/WWW-Mechanize-Firefox-0.55/lib/WWW/Mec... > > $mech->eval( $str [, $env [, $document]] ) > > my ($value, $type) = $mech->eval( '2+2' ); > > Evaluates the given Javascript fragment in the context of the web > page. Returns a pair of value and Javascript type. > > This allows access to variables and functions declared "globally" on > the web page. > > 2011/9/2 Morya Feng <[email protected]>: > > > > > 如果不限定语言的话,用别的语言写一个工具,只是用perl取得 > > 一下返回值和返回一些具体的执行结果字符串是不是可行? > > 比如,用python + PySide/PyQt + QtWebkit > > 在 2011年9月2日 上午10:18,liseen <[email protected]>写道: > > >> Hi, all > >> 用QtWebkit 吧, 用c++ 写, 接口很简单, 执行js什么的都没有问题。 > >> xunxin > >> 2011/9/2 eexpress <[email protected]> > > >>> 兼容测试?实际用浏览器测试好些。WWW::Mechanize不支持js,常规抓网页/提交内容,倒是顺手。Opera的菜单可以调用perl脚本,传递些Opera内部参数,这可以的。 > > >>> 在 Thu, 01 Sep 2011 22:04:47 +0800,Jeova Sanctus Unus > >>> <[email protected]> 写道: > > >>>> 按需写perl,该执行js,就找个模块来跑嘛,;) > >>>> 在 2011-9-1 下午8:09,"洋葱" <[email protected]>写道: > > >>>>> 请教一个Perl方面问题,生产中有需要使用Perl去测试一大堆手机网站,想判断这些网址是否最后都可以成功打开,并且判断返回的Content长度 > >>>>> 都超过1024字节。 > > >>>>> 目的:可以使用脚本对网站进行测试,如果网址有302或301跳转会自动跟进,如果网站有onenterforward或ontimer这种页面内的跳 > >>>>> 转也能够自动跳转,直至跟进到最后的页面,返回最后页面的status_line和content > > >>>>> 但是如果要兼容这些网站,就会存在一些问题, > >>>>> 1、比如网站的302 301Location要了识别并跟进【这个还好解决】 > >>>>> 2、如页有些网站的跳转是通过页面的refresh或者一些onenterforward、ontimer等等各种各样的花样百出的来实现的,其实如果 > >>>>> 想把所有网站都兼容好,那相当于写了一个Opera浏览器了。 > > >>>>> Perl是否可以直接调取现成的包,来实现这个功能,我在网上找过了,没有发现有这么功能的模块。我又想过装个Linux版本下的Opera,看是否有 > >>>>> 接口供调用,发现也没有这个功能。大家有什么好建议吗? > > >>>>> -- > >>>>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。 > >>>>> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > >>>>> 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 > >>>>> 若有更多问题,请通过http://groups.google.com/group/perlchina?hl=zh-CN访问此网上论坛。 > > >>> -- > >>> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。 > >>> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > >>> 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 > >>> 若有更多问题,请通过http://groups.google.com/group/perlchina?hl=zh-CN访问此网上论坛。 > > >> -- > >> - xunxin 万��新 > >> - 技术部搜索组工程师 > >> - Tel: 86-10-5760 3320 > > >> - Mobile: 86-13811636901 > > >> -- > >> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。 > >> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > >> 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 > >> 若有更多问题,请通过http://groups.google.com/group/perlchina?hl=zh-CN访问此网上论坛。 > > > -- > > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。 > > 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > > 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 > > 若有更多问题,请通过http://groups.google.com/group/perlchina?hl=zh-CN访问此网上论坛。 > > -- > 如果觉得无聊,您不妨访问Google Reader消遣https://www.google.com/reader/view > 要尝试黑版本Google,请访问http://tinyurl.com/yk3yp7j -- 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
