代码之家  ›  专栏  ›  技术社区  ›  tread

我们如何告诉WWW::机械化::Firefox不要等待响应或回发?

  •  2
  • tread  · 技术社区  · 13 年前

    嗨,我正在使用循环 get 各种页面。

    代码:

    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**);`
    

    如有任何协助,我们将不胜感激。谢谢

    更新:

    我发现它在第一次下载时就被卡住了,因为WWW::机械化::Firefox正在等待响应或回发,但它没有得到。刚刚下载了一个文件。

    $mech->click($csvbutton);
    

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

    如何告诉WWW::机械化::Firefox不要等待响应或新页面加载?

    谢谢

    2 回复  |  直到 13 年前
        1
  •  1
  •   gangabass    13 年前

    你试过了吗 synchronize 用于单击的选项:

    $mech->click( $csvbutton, { synchronize => 0 } );
    
        2
  •  1
  •   tread    13 年前

    线条的格式应该是完美的形式:

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

    您必须使用 selector => xpath =>

    签名:

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

    然后单击将不会等待Web服务器的响应。

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

    推荐文章