在AWS Lambda中使用jsdom加载外部资源需要使用一些特殊的技巧。下面是一种可行的方法:
npm install jsdom request
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const request = require('request');
const loadUrl = (url) => {
return new Promise((resolve, reject) => {
request(url, (err, res, body) => {
if (err) {
reject(err);
} else {
resolve(body);
}
});
});
}
exports.handler = async (event, context, callback) => {
const url = 'https://example.com';
const html = await loadUrl(url);
const dom = new JSDOM(html, {
resources: 'usable',
runScripts: 'dangerously',
pretendToBeVisual: true,
beforeParse(window) {
const script = window.document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js';
window.document.head.appendChild(script);
},
onload: function() {
console.log('Finished loading external resources');
}
});
// Do something with the loaded DOM here
callback(null, 'Done');
}
在这种情况下,我们将jQuery添加到了虚拟的window对象中,以便后续操作可以使用它来操作DOM。通过设置'beforeParse”选项,我们可以在构建DOM之前向文档中添加脚本。
当jsdom加载完成外部资源时,它将触发'onload”回调。在这个例子中,我们只是简单地输出一条日志信息。
完成后,你可以在'Do something with the loaded DOM here”块中添加任何需要处理的代码。在代码执行完成后,使用'callback”函数结束Lambda函数。