最近问这个问题的用户较多,介绍下适用 Macaca 如何检测 web 页面的链接情况,如某些链接是 404、302 等不正常情况。
脚本比较好写,如下
it('deadlink check', function() {
return driver
.get(initialURL)
.source()
.then(html => {
var anchors = html.match(/href=\"(.+)\"/g);
var queue = [];
anchors.map(anchor => {
var _url = url.resolve(`${serverURL}/macaca-test/`, anchor.split('"')[1]);
var p = new Promise(resolve => {
urllib.request(_url, (err, data, res) => {
if (err) {
throw err; // you need to handle error
}
resolve({
statusCode: res.statusCode,
anchor: anchor
});
});
});
queue.push(p);
});
return Promise.all(queue)
.then(res => {
console.log('Links number: %s', res.length);
var d = _.filter(res, d => {
return d.statusCode === 200;
});
console.log('Bad links number: %s', res.length - d.length);
});
});
});
输出几行 log:
>> Links number: 10
>> Bad links number: 2
其实就是使用了source
等 API,解析出锚点链接,然后检测链接的正确性。其它语言可以照理实现。
页面经常有动态渲染的情况,但通过source
方法只能拿到首出的 html。想要得到 js 动态创建的节点,需要在合适的时机通过execute
方法获取即可。
driver.execute('document.querySelectorAll("a")').then(...)