更新:为什么'base'标记阻止了jsdom.env的工作?
我发现了,我没能在运行jQuery的网页所使用的标签“基地”如果网站包含标签jsdom是行不通的。虽然我不知道为什么。
<base href="http://bbs.18183.com/" />
为了验证这一点,我创建了一个全新的HTML文件,并把里面,然后jsdom失败。
我目前使用的是Node.js玩耍,读书How to Scrape Web Pages with Node.js and jQuery后,我决定创建一个我。
所以我安装了express,jsdom和很多东西,发现它很方便的抓取网页。但后来我发现,一些特定的页面不能被刮出一个奇怪的情况,相反,它会提示为随后的错误:
var title = $('title').text();
^
TypeError: undefined is not a function
at H:\animalwar\personal\node\getter\app.js:82:23
at exports.env.exports.jsdom.env.scriptComplete (H:\animalwar\personal\node\
getter\node_modules\jsdom\lib\jsdom.js:207:39)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
这里是我的代码:
request({
url:'http://bbs.18183.com/'},
function (err, response, body) {
if(err && response.statusCode !== 200){
console.log('Connection Failure! Fuck GFW');
res.end('Connection Failure! Fuck GFW');
return;
}
jsdom.env({
html: body,
scripts: ['jquery.js']
}, function(err, window){
//Use jQuery just as in a regular HTML page
var $ = window.jQuery;
var title = $('title').text();
console.log('SUCCESSFULLY GOT: ', title);
res.end(title);
}
);
});
网站“http://bbs.18183.com/”不工作在这种情况下,但许多其他网站正在工作。例如,将其更改为“http://www.18183.com/”,它正在工作。
我想这是由于“$”定义的一些冲突,但后来我意识到,与jsdom.env页面只是一个DOM树。尽管我将$改为其他名称,但它仍然无效。
有没有人知道这件事?