Nodejs просматривает сайт после того, как javascript загрузил значения - PullRequest
7 голосов
/ 21 февраля 2012

Вероятно, вопрос новичка по nodejs / jsdom

Я пытаюсь очистить сайт с помощью node.js. Я использую jsdom и jquery, чтобы получить HTML и разобрать необходимые вещи. Но, так или иначе, ценности, которые я получаю, не те, которые показаны на сайте. В основном значения динамически изменяются JavaScript, и я хочу, чтобы эти значения. Единственная причина, по которой я использовал nodejs / jsdom для очистки, заключалась в том, что js будет выполнен, и я получу значения после этого события.

Есть ли какой-нибудь способ сказать jsdom ждать, пока не выполнится javascript? или я все неправильно понял? Я много гуглил по этому вопросу.

Ответы [ 3 ]

7 голосов
/ 04 мая 2012

Вам лучше использовать что-то вроде casperjs http://casperjs.org/. Это утилита для тестирования, основанная на phantomjs.Это в основном точно так же, как открытие страницы в браузере webkit, просто без графического интерфейса.Вы могли бы написать что-то вроде.Я не думаю, что он работает с узлом, но он должен быть достаточно простым для запуска сценария Каспера и передачи вывода обратно на узел.:

var casper = require('casper').create({
    loadImages: true,
    loadPlugins: true,
    verbose: true,
    //logLevel: 'info',
    clientScripts: [
        'jquery-1.7.1.min.js',
    ],
    viewportSize: {
        width: 1366,
        height: 768,
    },
    pageSettings: {
        javascriptEnabled: true,
        userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5',
    },
});

casper.start(url);

casper.thenEvaluate(function () {
    //javascript code to run in the scope of the page
});
0 голосов
/ 21 февраля 2012

Во-первых, как вы используете JSDOM? Очевидно, jsdom.env не выполняет сценарии в DOM, а только сценарии, которые вы добавляете в вызове jsdom.env. Если вы хотите выполнять скрипты, я думаю, вы должны использовать jsdom.jsdom.

Во-вторых, вам нужно указать обработчик onload. Это должно выполняться после того, как документ будет готов, и, надеюсь, любые сценарии изменят DOM по вашему вкусу.

Примерно так:

var jsdom = require('jsdom').jsdom
  , document = jsdom(html)
  , window = document.createWindow();

document.onload = function() {
  // Do your stuff
}
0 голосов
/ 21 февраля 2012

Я не знаю, подходите ли вы к альтернативам, но когда мне нужен такой чувствительный анализ, я просто использую Firefox с iMacros. Он прекрасно работает на всех браузерах JS, потому что он является браузером.

http://www.iopus.com/imacros/firefox/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...