2013-11-26 7 views
5

Мне нужно, чтобы загрузить следующую страницу: http://m.10bet.com/#leage_panel#10096сайта выскабливание: Ждать, пока сайт не будет загружен укомплектовать

Это страница букмекера и мне нужны кавычки. Итак, в первую очередь это кажется довольно простым. Однако, вот что происходит (вы можете проверить это с помощью, например, разработчик инструментов вашего браузера.):

  1. Откройте URL
  2. страница загружает первоначальный HTML, который впоследствии вызывающий запрос Ajax для получения котировки
  3. Однако цитата содержится в json, но они обструкционированы таким образом, что невозможно просто проанализировать их непосредственно из вызова ajax. Кроме того, JavaScript просматривается на веб-странице. Поэтому нет возможности напрямую читать цитаты из запроса.

Вместо этого мне нужно будет использовать безгласный браузер, способный оценивать javascript. HtmlUnit для java неадекватен, поскольку он не предлагает надежную функциональность javascript. Поэтому PhantomJS в сочетании с CasperJS - мой текущий выбор. Я применяю CasperJS со следующим сценарием:

var casper = require('casper').create(); 

casper.start('http://m.10bet.com/#leage_panel#10096', function() { 
    var url = 'http://m.10bet.com/#leage_panel#10096'; 
    this.download(url, '10bet.html'); 
}); 

casper.run(function() { 
    this.echo('Done.').exit(); 
}); 

Однако этот скрипт не загружает полную страницу. Просто встроенная страница. Как загрузить полную веб-страницу, как она представлена ​​в браузере?

+0

Я не знаком с этими инструментами, но можете ли вы прикрепить свой код к событию 'domready'? Это может сделать это. – halfer

ответ

7

Этот сценарий выглядит как хороший старт, но как только ваша (HTML) страница загружается, сценарий (CasperJS) останавливается, потому что вы еще не дали ему никаких инструкций. Грубейшей способ исправить это было бы пойти спать в течение нескольких секунд, а затем очистить страницу:

var casper = require('casper').create(); 
var fs=require('fs'); 

casper.start('http://m.10bet.com/#leage_panel#10096', function() { 
    this.wait(2000, function() { 
     fs.write("10bet.html", this.getHTML()); 
    }); 
}); 

casper.run(); 

2000 мс тайм-аут сырой по нескольким причинам:

  1. Если данные загружаются быстрее, чем вы тратите время.
  2. Если он загружается медленнее, ваш скрипт не работает.

Так что лучше идентифицировать что-то на странице, которая вам нужна и должна быть там, а затем использовать одну из функций Casper waitForXXX(). См. Документы API, начинающиеся здесь: http://casperjs.readthedocs.org/en/latest/modules/casper.html#waitfor

Как еще один момент, я предполагаю, что на самом деле не нужна вся HTML-страница, а только данные в ней. getHTML() принимает параметр для фильтрации полученного. Например. в вашем случае getHTML('#league_block') может быть намного полезнее. Опять же, см. Документы API для получения дополнительных идей.

+0

Эй, Даррен! Вы были слишком быстры. Я просто хотел опубликовать ваши предложения в качестве ответа на мой вопрос. Я использовал waitForResource (...). Работает отлично. Спасибо за вашу помощь! :) – toom

Смежные вопросы