我正在尝试使用 Node.js 包请求和 jsdom 来抓取网页,我想知道如何提交表单并获得他们的回复。我不确定 jsdom 或其他模块是否可以做到这一点,但我知道请求支持 cookie。
以下代码演示了我如何使用 jsdom(以及 request 和 jQuery)来检索和解析网页(在本例中为 Wikipedia 主页)。(请注意,此代码改编自本教程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();
);
});
});
上面的代码从 Wikipedia 的搜索表单中打印 HTML,然后是“Wood”,这是我设置 searchInput 字段要包含的值。当然,这里的 click() 方法实际上并没有做任何事情,因为 jQuery 不是在浏览器中运行的;我什至不知道 jsdom 是否支持任何类型的事件处理。
是否有任何模块可以帮助我以这种方式或以类似的非 jQuery 方式与网页交互?这可以在jsdom中完成吗?
提前致谢!