2013-04-04 5 views
0

Я пытаюсь просканировать сайт, который загружает страницы, если я нажму «Показать больше продуктов». Я использую 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> 

ответ

3

Это очень легко запрос проверки фактического HTTP сделанные после нажатия на эту кнопку в вашем браузере и просто повторить такой запрос в коде с помощью:

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

Я использую Firefox, HTTPFox расширение для таких вещей ...

1

WWW :: Механизировать, как указано в руководстве пользователя, не включен Javascript. Вы пытаетесь щелкнуть по кнопке, которая вызовет запрос Ajax, поэтому вы не получите никаких результатов, щелкнув по нему из WWW :: Mechanize.

В таких случаях сначала необходимо проанализировать все это, пытаясь понять, какой запрос на самом деле выполняет вызов Ajax. Самый простой способ сделать это - использовать браузер, который позволяет вам проверять отдельные запросы. Лично мне нравится, как Google Chrome делает это:

  1. Откройте страницу в Chrome
  2. Нажмите Ctrl - Shift - I, чтобы открыть панель Разработчик
  3. Нажмите на вкладке «Сеть» на панели и нажмите кнопку «XHR» в нижней части панели.

Теперь, каждый раз, когда вы нажимаете кнопку, которая делает запрос Ajax, вы увидите список каждого запроса слева. Если вы нажмете на любой из них, вы сможете увидеть точный запрос (заголовки, поля формы, запрос, ответ, время и т. Д.).

Не все, что вы видите там, должно быть настроено. Как правило, вам просто нужно найти поле формы, содержащее команду, которая запускает ответ типа Ajax с сервера. Остальное - это, как правило, файлы cookie и другие материалы, которые www :: Mechanize уже обрабатывает для вас.

Кроме того, не забудьте позвонить $mech->back() после каждого запроса Ajax, поэтому все ваши текущие поля формы возвращаются к состоянию страницы, на которой размещены эти кнопки.

НТН :-)

Francisco

+0

(Request-Line) \t POST /api/ajaxList.php?storeid=1&lazyloader=1&cat=48&cName=QmFieSBEaWFwZXJz&offer_special=0&crsl=0&example=0&p=2&dir=asc&order= популярный HTTP/1.1 Хост \t www.example.com User-Agent \t Mozilla/5.0 (Windows NT 5.1; с.в.: 20,0; WUID = d007a10bb4a33e7e7ce0d628dc0e22e0; WTB = 2937) Gecko/20100101 Firefox/20.0 Accept \t */* Accept-Language \t en-US, en; q = 0.5 Accept-Encoding \t gzip, deflate Content-Type \t application/x-www-form-urlencoded; charset = UTF-8 X-Requested-With \t XMLHttpRequest Referer \t http://www.example.com/xyz.html Контент-длина Соединение \t keep-alive Pragma \t no-cache – user2243481