アップデート:
jQuery の実行に失敗したページで使用されているタグ「base」を見つけました。Web サイトにそのタグが含まれている場合、jsdom は機能しません。理由はわかりませんが。
<base href="http://bbs.18183.com/" />
これを確認するために、新しい HTML ファイルを作成して内部に配置すると、jsdom が失敗します。
私は現在 Node.js で遊んでいます。Node.js と jQuery を使用して Web ページをスクレイプする方法を読んだ後、自分用に作成することにしました。
そこで、express、jsdom などをインストールしましたが、Web ページをスクレイピングするのに非常に便利であることがわかりました。しかし、後で特定のページをスクレイピングできないという奇妙な状況を発見しました。代わりに、次のようなエラーが表示されます。
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);
}
);
});
この場合、 Web サイト " http://bbs.18183.com/ " は機能していませんが、他の多くの Web サイトは機能しています。たとえば、「http://www.18183.com/」に変更すると、機能します。
「$」の定義の競合が原因だと思いますが、後で jsdom.env を使用すると、ページが単なる DOM ツリーであることに気付きました。$ を他の名前に変更しても、まだ機能しません。
誰もこれについて何か知っていますか?