Perl 我应该点击哪个按钮?

Perl 我应该点击哪个按钮?,perl,mechanize,Perl,Mechanize,我试图爬网一个网站,加载网页,如果我点击“显示更多的产品”。我正在使用perl mechanize。这是我从网站上得到的内容。我应该在click_button()中指定什么,以便单击“显示更多产品”按钮 <div id='lPage' style='display:none' class='lpge'>1</div> <div class='clearfix'> <div id='divMoreProducts' onclick='jav

我试图爬网一个网站,加载网页,如果我点击“显示更多的产品”。我正在使用perl mechanize。这是我从网站上得到的内容。我应该在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>
1
展示更多产品
搜索结果133
1.
var enable\u show\u more\u product=true;
jQuery(文档).ready(函数(){
试一试{
jQuery(“pre.loadme”).lazyLoad();
}捕获(e){
}
});
jQuery(函数(){
jQuery(“.showMoreProd”).mousedown(函数(){
jQuery(this.addClass)(“showMoreProdImp”);
}).mouseup(函数(){
jQuery(this).removeClass(“showMoreProdImp”);
});
});

在浏览器中单击此按钮后,很容易检查实际发出的HTTP请求,只需使用以下命令在代码中重复此请求:


我正在使用Firefox的扩展来实现这些功能…

在浏览器中单击此按钮后,检查实际发出的HTTP请求非常容易,只需使用以下命令在代码中重复该请求:


我正在使用Firefox的扩展来实现这些功能…

WWW::Mechanize,正如用户手册所述,没有启用Javascript。您试图单击一个按钮来触发Ajax请求,因此从WWW::Mechanize“单击”它不会得到任何结果

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

  • 在Chrome中打开页面
  • 按Ctrl-Shift-I打开“开发人员”面板
  • 单击面板中的“网络”选项卡,然后单击面板底部的“XHR”按钮
  • 现在,每次单击发出Ajax请求的按钮时,您都会在左侧看到每个请求的列表。如果单击其中任何一个,您都可以看到确切的请求(标题、表单字段、请求、响应、时间等)

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

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

    HTH:-)


    Francisco

    WWW::Mechanize,如用户手册所述,未启用Javascript。您试图单击一个按钮来触发Ajax请求,因此从WWW::Mechanize“单击”它不会得到任何结果

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

  • 在Chrome中打开页面
  • 按Ctrl-Shift-I打开“开发人员”面板
  • 单击面板中的“网络”选项卡,然后单击面板底部的“XHR”按钮
  • 现在,每次单击发出Ajax请求的按钮时,您都会在左侧看到每个请求的列表。如果单击其中任何一个,您都可以看到确切的请求(标题、表单字段、请求、响应、时间等)

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

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

    HTH:-)

    Francisco

    (请求行)POST/api/ajaxList.php?storeid=1&lazyloader=1&cat=48&cName=qmfiesbeawwzxjz&offer_special=0&crsl=0&example=0&p=2&dir=asc&order=popular HTTP/1.1主机www.example.com用户代理Mozilla/5.0(Windows NT 5.1;rv:20.0;WUID=D007A10BB4E7E7CE0D628DC0E22E0=2937)Gecko/20100101 Firefox/20.0接受/接受美国英语、英语语言;q=0.5接受编码gzip,泄气内容类型应用/x-www-form-urlencoded;charset=UTF-8 X-Request-With XMLHttpRequest Referer Content Length 151 Connection keep alive Pragma no cache(请求行)POST/api/ajaxList.php?storeid=1&lazyloader=1&cat=48&cName=qmfiesbeawwzxjz&offer_special=0&crsl=0&example=0&p=2&dir=asc&order=popular HTTP/1.1主机www.example.com用户代理Mozilla/5.0(Windows NT 5.1;rv:20.0;WUID=d007a10bb4a33e7e7ce0d628dc0e22e0;WTB=2937)Gecko/20100101 Firefox/20.0接受/接受语言en-US,en;q=0.5接受编码gzip,泄气内容类型应用程序/x-www-form-urlencoded;charset=UTF-8 x-request-With-XMLHttpRequest引用器内容长度151连接保持活动Pragma无缓存
    $mech->post( URL, Content => {...} );