如果点击“显示更多产品”,我正在尝试抓取加载网页的网站。我正在使用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>
答案 0 :(得分:3)
在浏览器中检查点击此按钮后发出的实际HTTP请求非常容易,只需在您的代码中重复此类请求:
$mech->post( URL, Content => {...} );
我正在使用Firefox的HTTPFox扩展程序......
答案 1 :(得分:1)
WWW :: Mechanize,正如用户手册所述,未启用Javascript。您正在尝试单击将触发Ajax请求的按钮,因此您不会通过从WWW :: Mechanize“单击”它来获得任何结果。
在这种情况下,您需要首先分析整个事情,尝试了解Ajax调用实际执行的请求类型。最简单的方法是使用允许您检查单个请求的浏览器。就个人而言,我喜欢谷歌Chrome的做法:
现在,每次单击发出Ajax请求的按钮时,您都会在左侧看到每个请求的列表。如果您点击其中任何一个,您就能看到确切的请求(标题,表单字段,请求,响应,时间等)。
并非您在那里看到的所有内容都需要进行设置。通常,您只需要找到包含从服务器触发Ajax类型响应的命令的表单字段。其余的通常是cookie和其他www :: Mechanize已为您处理的东西。
此外,每次发布Ajax请求后都不要忘记调用$mech->back()
,因此所有当前的表单字段都会返回到承载这些按钮的页面状态。
HTH: - )
旧金山