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
运行。将内容打印到控制台后,该过程就会卡住。
答案 0 :(得分:2)
在这里回答我自己的问题。在evaluate函数中创建一个数组并推送内部元素。我想唯一的限制是phantom-node
只支持返回带有基元的对象。
var result = await page.evaluate(function() {
var questionSummaries = [];
$("[class*='question-summary']").each(function() {
questionSummaries.push(this.innerHTML);
});
return questionSummaries;
});