Mise à jour:Pourquoi la balise 'base' empêche jsdom.env de fonctionner?
J'ai trouvé utilisé la « base » de la balise dans la page que je jQuery pas à exécuter dans Si le site contient cette balise le jsdom ne fonctionnerait pas.. Bien que je ne sais pas pourquoi.
<base href="http://bbs.18183.com/" />
Pour vérifier cela, je crée un fichier HTML flambant neuf et de mettre un à l'intérieur, l'jsdom échoue.
Je suis actuellement jouer avec Node.js, et après avoir lu How to Scrape Web Pages with Node.js and jQuery je décide de créer un pour moi. J'ai donc installé express, jsdom et beaucoup de choses et j'ai trouvé qu'il était très pratique de gratter les pages Web. Mais plus tard, je trouvais une étrange situation que certains page particulière ne peut être gratté, au lieu, il demande une erreur comme suit:
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)
Voici mon code:
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);
}
);
});
Le site « http://bbs.18183.com/ » ne fonctionne pas dans ce cas, mais de nombreux autres sites fonctionnent. Par exemple, l'a changé pour "http://www.18183.com/", cela fonctionne.
Je suppose que c'est dû à un conflit de la définition de "$" mais plus tard, j'ai réalisé qu'avec jsdom.env la page est juste un arbre DOM. Même si j'ai changé $ à d'autres noms cela ne fonctionne toujours pas.
Est-ce que quelqu'un sait quelque chose à ce sujet?