我应该点击哪个按钮?

时间:2013-04-04 09:07:37

标签: perl mechanize

如果点击“显示更多产品”,我正在尝试抓取加载网页的网站。我正在使用perl机械化。这是我从网站上获得的内容。我应该在click_button()中指定什么,以便点击显示更多产品按钮?

  <div id='lPage' style='display:none' class='lpge'>1</div>
  <div class='clearfix'>
    <div id='divMoreProducts' onclick='javascript:showMoreProductsAjax("All Products")' class='showMoreProd' style='display:none;'>
      <span>Show more products</span>
    </div>
    <div id='divMoreProductsLoader' style='display:none;text-align:center'>
      <img src='http://img2.babyoye.com/skin/frontend/default/babyoye_2012/images/ajax-more-loader.gif'>
    </div>
  </div>
  <div id='botControl'>
    <span style='float:right'><strong>Search result </strong>133</span>
  </div>
</article>
<div id='lPage' style='display:none' class='lpge'>1</div>
<script type="text/javascript">var enable_show_more_product = true;</script>
<script type="text/javascript">
  jQuery(document).ready(function(){
    try {
      jQuery("pre.loadme").lazyLoad();
    } catch(e) {
    }
  });
  jQuery(function () {
    jQuery(".showMoreProd").mousedown(function (){
      jQuery(this).addClass("showMoreProdImp");
    }).mouseup(function () {
      jQuery(this).removeClass("showMoreProdImp");
    });
  });
</script>
</div>

2 个答案:

答案 0 :(得分:3)

在浏览器中检查点击此按钮后发出的实际HTTP请求非常容易,只需在您的代码中重复此类请求

$mech->post( URL, Content => {...} );

我正在使用Firefox的HTTPFox扩展程序......

答案 1 :(得分:1)

WWW :: Mechanize,正如用户手册所述,未启用Javascript。您正在尝试单击将触发Ajax请求的按钮,因此您不会通过从WWW :: Mechanize“单击”它来获得任何结果。

在这种情况下,您需要首先分析整个事情,尝试了解Ajax调用实际执行的请求类型。最简单的方法是使用允许您检查单个请求的浏览器。就个人而言,我喜欢谷歌Chrome的做法:

  1. 在Chrome中打开该页面
  2. 按Ctrl - Shift - I打开开发人员面板
  3. 点击面板中的“网络”标签,然后点击面板底部的“XHR”按钮。
  4. 现在,每次单击发出Ajax请求的按钮时,您都会在左侧看到每个请求的列表。如果您点击其中任何一个,您就能看到确切的请求(标​​题,表单字段,请求,响应,时间等)。

    并非您在那里看到的所有内容都需要进行设置。通常,您只需要找到包含从服务器触发Ajax类型响应的命令的表单字段。其余的通常是cookie和其他www :: Mechanize已为您处理的东西。

    此外,每次发布Ajax请求后都不要忘记调用$mech->back(),因此所有当前的表单字段都会返回到承载这些按钮的页面状态。

    HTH: - )

    旧金山