Мне нужно сделать какой-то веб-соскоб Отказ После игры с различными веб-структурами веб-тестирования, из которых большинство, где либо слишком медленно (селен), либо слишком багги для моих потребностей (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, и я не знаю, как заставить обработчики событий, которые инициируют загрузку.
Есть несколько вопросов, которые у меня есть относительно этой проблемы:
снова, пожалуйста, сделайте Не укажите мне решения, связанные с контролем реального браузера, как селен, как я знаю о тех. Однако, как правило, являются предложениями для реального рендерера в памяти, как WebKit, доступные из языка сценариев рубин, но предпочтительно, чтобы с возможностью установить файлы cookie и предпочтительно также загружать RAW HTML вместо того, чтобы запускать реальные HTTP-запросы.