Node.js パッケージの request と jsdom を使用して Web ページをスクレイピングしようとしていますが、フォームを送信して応答を取得する方法を知りたいです。これが jsdom または別のモジュールで可能かどうかはわかりませんが、リクエストが Cookie をサポートしていることは知っています。
次のコードは、jsdom を (リクエストと jQuery と共に) 使用して Web ページ (この場合はウィキペディアのホームページ) を取得および解析する方法を示しています。(このコードは、このチュートリアルhttp://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejsの jquery-request.js コードから適用されていることに注意してください)
var request = require('request'),
jsdom = require('jsdom'),
url = 'http://www.wikipedia.org';
request({ uri:url }, function (error, response, body) {
if (error && response.statusCode !== 200) {
console.log('Error when contacting '+url);
}
jsdom.env({
html: body,
scripts: [
'http://code.jquery.com/jquery-1.5.min.js'
]
}, function (err, window) {
var $ = window.jQuery,
// jQuery is now loaded on the jsdom window created from 'agent.body'
$searchform = $('#searchform'); //search form jQuery object
$('#searchInput').val('Wood');
console.log('form HTML is ' + $searchform.html(),
'search value is ' + $('#searchInput').val()
//how I'd like to submit the search form
$('#searchform .searchButton').click();
);
});
});
上記のコードは、ウィキペディアの検索フォームから HTML を出力し、次に searchInput フィールドに設定した値である "Wood" を出力します。もちろん、ここでは click() メソッドは実際には何もしません。jQuery はブラウザーで動作していないからです。jsdom が何らかの種類のイベント処理をサポートしているかどうかさえわかりません。
この方法で、または同様の非jQueryの方法でWebページとやり取りするのに役立つモジュールはありますか? これはjsdomで行うことができますか?
前もって感謝します!