如何使用Casperjs检查网页中的断开链接
How to check broken links in a webpage using Casperjs?
我想检查使用casperjs的网页中存在的所有断开链接。我写了下面的代码,但它不工作:
casper.then(function() {
var urls=casper.getElementsAttribute('a[href]', 'href');
casper.eachThen(urls, function(response) {
var link=response.data;
this.thenOpen(demourl, function(response) {
if (response == undefined || response.status >= 400) {
this.echo("failed");
}
})
this.on('http.status.404', function(resource) {
this.echo('wait, this url is 404: ' + resource.url);
})
})
})
我的网页由400多个链接组成。我的代码没有完成它的执行,并在一些链接后保持空闲。它没有给我任何回应。我不明白为什么会这样?
获取链接url
DOM元素的属性和属性是有区别的。如果你有一个域名为http://example.com的网站你想要获取该页面
上以下链接的href
<a href="/path/to/stuff">text</a>
如果您使用aElement.getAttribute("href")
,您将得到"/path/to/stuff"
,但如果您使用aElement.href
,您将得到计算URL "http://example.com/path/to/stuff"
。只有后者是CasperJS(实际上是PhantomJS)能够理解的URL。
我告诉你这一点,因为casper.getElementsAttribute()
内部使用element.getAttribute()
方法,产生无法用casper.thenOpen()
打开的url。
修复方法很简单:
var urls = casper.evaluate(function(){
return [].map.call(document.querySelectorAll('a[href]'), function(a){
return a.href;
});
});
另外,您可能希望将casper.on()
事件注册移动到casper.eachThen()
调用之上。您不需要在每次迭代中都注册事件。
注册链接超时
因为你有一些URL没有加载的问题(可能是因为它们被破坏了),你可以使用casper.options.stepTimeout
设置一个步骤的超时,这样CasperJS就不会冻结在一些不可检索的URL上。您还需要定义onStepTimeout()
回调,否则CasperJS将退出。
casper.then(function() {
var currentURL;
casper.options.stepTimeout = 10000; // 10 seconds
casper.options.onStepTimeout = function(timeout, stepNum){
this.echo('wait, this url timed out: ' + currentURL);
};
var urls = this.evaluate(function(){
return [].map.call(document.querySelectorAll('a[href]'), function(a){
return a.href;
});
});
this.on('http.status.404', function(resource) {
this.echo('wait, this url is 404: ' + resource.url);
});
urls.forEach(function(link) {
this.then(function(){
currentURL = link;
});
this.thenOpen(link, function(response) {
if (response == undefined || response.status >= 400) {
this.echo("failed: " + link);
}
});
});
});
相关文章:
- markrwithlabel.js(第三方)原始文件链接断开
- 如何使用Cucumber.js检查断开的链接
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- 更新链接形状时,Safari中的SVG clipPath与USE断开
- AngularJS-谷歌Chrome扩展中的动态链接断开
- WordPress 类别下拉菜单选择链接断开
- jQuery 淡入淡出图像上的悬停动画会断开链接
- 野生动物园浮动左边的问题与断开的链接
- 滚动动画会断开页面上的链接
- Javascript 中的 Hashtag RegExp 会断开与锚点和 HTML 实体的链接
- PHP-JSON :检查断开的链接
- 使用Selenium网络驱动程序在网页上查找断开的链接,避免动态生成链接
- jQuery appendTo在Firefox上断开链接
- Bower - EPERM,断开链接错误
- 将HTML代码与javascript断开链接的正则表达式
- Parse.com文件不更新,导致从数据浏览器断开链接
- Javascript:断开链接检查器-优点和缺点
- 如何使用Casperjs检查网页中的断开链接
- 断开链接的替代链接
- 匿名/私人浏览会断开链接