NodeJs + PhantomJs从page.evaluate方法返回JQuery结果

时间:2017-03-23 05:44:44

标签: javascript jquery node.js phantomjs

NodeJS新手在这里。我试图使用NodeJS和PhamtomJS(phantomjs-node)解析html。当我从浏览器控制台运行JQuery $("[class*='question-summary']")时,它返回一个数组。但是,我无法在nodejs上做同样的事情。我想stackoverflow有JQuery所以我不需要使用includeJs来加载jquery。实际上,当我跑步时

这是我正在运行的nodejs示例;

var phantom = require('phantom');

async function getHtml() {
    const instance = await phantom.create([
        "--load-images=false"    
    ]);

    const page = await instance.createPage();
    await page.on("onResourceRequested", function(requestData) {
        console.info('Requesting', requestData.url)
    });

    const status = await page.open('http://stackoverflow.com');
    console.log("STATUS: " + status);

    const content = await page.property('content');
    console.log(content);

    var result = await page.evaluate(function(content) {
                    return $("[class*='question-summary']");
                 });

    console.log("Result : " + result);
    await instance.exit();
};

getHtml();

我使用命令>node --harmony-async-await phantomTest.js运行。将内容打印到控制台后,该过程就会卡住。

1 个答案:

答案 0 :(得分:2)

在这里回答我自己的问题。在evaluate函数中创建一个数组并推送内部元素。我想唯一的限制是phantom-node只支持返回带有基元的对象。

var result = await page.evaluate(function() {
    var questionSummaries = [];
    $("[class*='question-summary']").each(function() {
        questionSummaries.push(this.innerHTML);
    });
    return questionSummaries;
});