WWW :: Mechanize :: Firefox - 如何打开多个选项卡

时间:2013-05-10 16:03:25

标签: perl

我想打开两个单独的标签,并在Firefox中保持打开状态。我正在使用WWW::Mechanize::Firefox。 请找到以下代码:

#!/usr/bin/perl -w
use strict;
use WWW::Mechanize::Firefox;

my @array = <DATA>;

foreach (@array)
{
    my $mech = WWW::Mechanize::Firefox->new(    
                                            activate => 1,  # bring the tab to the foreground
                                            autoclose => 0  # to prevent autoclosing of the Tab
                                        ); 
    $mech->get($_);
}

__DATA__
www.google.com
www.yahoo.com

上面的代码工作正常,并创建两个选项卡。但是当我创建两个对象时,我对我的方法不满意。我正在寻找一些方法来打开多个标签。我无法使用单个$mech对象执行此操作,因此使用for循环创建了多个对象。

我已经阅读了以下文档:

WWW::Mechanize::Firefox

Firefox::Application

WWW::Mechanize::Plugin::Display

WWW::Mechanize::Firefox::Cookbook

然而,他们似乎都没有回答这个问题。或者我可能错过了那些文档中的一些信息。

问题:

  1. 是否可以使用WWW::Mechanize::Firefox打开多个标签页 或其他一些相关的firefox机械化模块?怎么样?
  2. 就个人而言,我不喜欢上面粘贴的代码正在创建 多个对象。是否可以创建多个对象?
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

创建多个对象没有任何内在错误。您可能会担心内存开销。对象可能会有额外的东西(在这种情况下为localhost TCP套接字),你不应该复制。每次要执行必须在对象之间共享的逻辑操作时,您可能会发现必须遍历多个对象会很烦人。

但没有人会惊恐地退缩。 “多个对象?!你怎么敢。”

如果您想要做的只是打开多个标签,我会使用以下内容:

sub browse {
  my $method = $_[1] ? 'new-window' : 'new-tab';
  system firefox => -remote => "openURL($_[0],$method)"
}