2

嗨我正在使用一个循环到get各种页面。我们如何告诉WWW :: Mechanize :: Firefox不要等待回复或回传?

的代码:

while($stm->fetch()) { 
    $mech->get(**#TheURL**); 

      $mech->select('this', 'that'); 
      $mech->tick('this' => undef); 
      $mech->tick('this' => undef ); 
      $mech->tick('this' => undef ); 
      $mech->tick('this' => undef ); 
      my $button = $mech->selector('input.button', single => 1); 
      $mech->click($csvbutton); 
} 

上述代码下载点击按钮之后的文件。然而,它会在第一次迭代之后停止。

我已更改Firefox的配置以禁用下载管理器弹出窗口。

我收到此错误一次:

MozRepl::RemoteObject::Object has no function addProgressListener at `$mech->get(**#TheURL**);` 

任何援助将不胜感激。谢谢。

UPDATE:

我发现它卡住第一下载,因为WWW ::机械化:: Firefox是等待响应或回传,它没有得到。一个文件只是下载。

$mech->click($csvbutton); 

这是停止的地方。如果我手动操作页面(即返回或转到主页或新的URL),它将继续循环。所以它正在等待新的页面加载。

我如何告诉WWW :: Mechanize :: Firefox不等待响应或新的页面加载?

感谢

回答

1

行的格式应该是完美的形式:

$mech->click({selector => ('input.button', single => 1), synchronize => 0}); 

必须使用selector =>xpath =>

签名:

$mech->click({xpath/selector => 'name' ,synchonize => 0}) 

然后点击不会等待的网络服务器的响应。

如上所述:cpan WWW::Mechanize::Firefox::Troubleshooting

1

你尝试点击synchronize选项:

$mech->click($csvbutton, { synchronize => 0 }); 
+0

我已经尝试过了。它仍然挂在第一个链接上,等待回发或新的页面加载。在文档中提到:“当点击执行一个需要更长时间的操作并在浏览器对象上触发一个事件时,有必要与浏览器同步。”当我的按钮被点击时,唯一触发的事件是创建和下载一个excel'csv'。 – surfer190