Проблемы с соскобом веб-сайта с использованием Zombie.js

Мне нужно сделать какой-то веб-соскоб Отказ После игры с различными веб-структурами веб-тестирования, из которых большинство, где либо слишком медленно (селен), либо слишком багги для моих потребностей (env.js), я решил, что Zombie.js выглядит наиболее перспективным, как он использует Сплошной набор библиотек для HTML разборки и манипуляций DOM. Однако мне кажется, что он даже не поддерживает базовый код JavaScript на основе событий, как на следующей веб-странице:


  
    test
    
  

  
    

Test

Я решил запускать эти события вручную, как это:

zombie = require("zombie");

zombie.visit("http://localhost:4567/", { debug: true }, function (err, browser, status) {

  doc = browser.document;
  console.log("firing DOMContentLoaded on " + doc);
  browser.fire("DOMContentLoaded", doc, function (err, browser, status) {

    body = browser.querySelector("body");
    console.log("firing load on " + body);
    browser.fire("load", body, function (err, browser, status) {

      console.log(browser.html());

    });
  });

});

, который работает для этой конкретной тестовой страницы. Отказ Моя проблема - это более общее, хотя: я хочу, чтобы я мог быть в состоянии соскребить более сложные сайты на основе Ajax, как список друзей на Facebook (что-то вроде http://www.facebook.com/profile.php? ID = 100000028174850 & SK = друзья & v = друзья ). Нет проблем войти в сайт, используя зомби, но какой-то контент, как эти списки, кажется, полностью загружен динамически используя AJAX, и я не знаю, как заставить обработчики событий, которые инициируют загрузку.

Есть несколько вопросов, которые у меня есть относительно этой проблемы:

  • У кого-нибудь уже реализовал аналогичный сложный скребок без использования раствора для управления дистанционным управлением браузера, как Selenium?
  • Есть некоторые ссылки на процесс загрузки сложного JavaScript -Бозная страница?
  • Может ли кто-нибудь предоставить советы о том, как отладить настоящего браузера, чтобы увидеть, что мне может потребоваться выполнить, чтобы вызвать обработчики событий Facebook?
  • Опять другие идеи об этой теме?

снова, пожалуйста, сделайте Не укажите мне решения, связанные с контролем реального браузера, как селен, как я знаю о тех. Однако, как правило, являются предложениями для реального рендерера в памяти, как WebKit, доступные из языка сценариев рубин, но предпочтительно, чтобы с возможностью установить файлы cookie и предпочтительно также загружать RAW HTML вместо того, чтобы запускать реальные HTTP-запросы.

9
задан Niklas B. 7 September 2011 в 15:56
поделиться