网页死链检测方法「建议收藏」

网页死链检测方法「建议收藏」 了解测试方法之前,先了解下死链、链接的相关概念死链的种类协议死链:页面的TCP协议状态/HTTP协议状态明确表示的死链, 常见的如404、403、503状态等。 内容死链:服务器返回状态是正常的, 但内容已经变更 为不存在、已删除或需要权限等与原内容无关的信息页面。死链出现的原因网站目录更换。 服务器里某个文件移动了位置或者删除。 网站服务器设置错误。 动态链接在数据…

大家好,又见面了,我是你们的朋友全栈君。

 

了解测试方法之前,先了解下死链、链接的相关概念

  • 死链的种类
  1. 协议死链:页面的TCP协议状态/HTTP协议状态明确表示的死链,
    常见的如404、403、503状态等。
  2. 内容死链:服务器返回状态是正常的,
    但内容已经变更
    为不存在、已删除或需要权限等与原内容无关的信息页面。
  • 死链出现的原因
  1. 网站目录更换。
  2. 服务器里某个文件移动了位置或者删除。
  3. 网站服务器设置错误。
  4. 动态链接在数据库不再支持的条件下。
  • 死链的影响
  1. 影响功能、用户体验。
  2. 减少搜索引擎的收录页面数量,降低网站在搜索引擎中的权重。
  3. 影响网站加载速度。
  4. 损伤网站的整体形象。
  • 链接的HTML 链接语法

a标签
通过使用 href 属性 – 创建指向另一个文档的链接;
<a href="url">Link text</a>
通过使用 name 属性 – 创建文档内的书签。
<a name="label">锚(显示在页面上的文本)</a>

  • 链接可以是文本、图像,可以通过点击来跳转到新的目标。

    目标:

  1. 另一个网页;
  2. 相同网页上的不同位置;
  3. 图片、电子邮件地址、文件;
  4. 应用程序。

网页死链检测 是日常网页测试中的一个基本测试点,相关的测试方法记录如下:

【方法一】点点点

在手动的人工功能中去测试相关的链接是否正常。判断网页中属于链接的部分,点击并观察链接目标的正确性。

缺点:

  • 效率低:需要排除页面中的其他干扰项(非链接的文本、图片、按钮等),需要人工点击等待后判断,耗时耗力;
  • 人为失误:测试人员对经常迭代的常规测试项目容易形成思维定势,或者开发人员给出的改动范围并不全面,会导致死链被漏测。

【方法二】网页式的检测工具:站长工具

进入检测工具的网页,输入待检测网站的链接,点击查询。

优点:

  • 简单易用。

缺点:

  • 仅对线上环境有效;
  • 仅进行url的检测,不涉及其他网站元素、资源;
  • 仅可检测出协议死链;
  • 遍历检测的层数较浅,深度不够,子页面下的链接未继续检测。

【方法三】软件式的检测工具:Xenu工具

下载检测工具,输入待检测网站的链接(测试环境、线上环境均可),设置检测相关的设置,点击查询。

优点:

  • 全面:从待测网站的根目录开始搜索所有的网页文件并读取其中的所有的超级链接、图片文件、包含文件、CSS文件、页面内部链接等;
  • 高效:最大支持100线程,检测速度非常快;
  • 记录网站内文件不存在、指定文件链接不存在或者是指定页面不存在
    的问题链接和处于其所处的具体位置;
  • 可输出测试报告、设置邮件通知;
  • 有重新检查失败链接的功能。

检查报告中的状态分类:

  • 链接正常:ok、mail host ok;
  • 访问超时、无法访问:timeout、no connection、no such host;
  • 没有找到,即空链接:not found;
  • 没有对象返回,即空页面:no info to return;
  • 没有对象数据,常见于访问服务器出现400错误等访问出错情况:no object data。

缺点:

  • 不开源

【方法四】编程

如果用编程的手段来实现死链检测,你的实现思路会是怎样的?

[思路一] 爬虫思维

先遍历抓取所有相关链接,再判断链接有效性。

相关样例:

  • 【Python】多线程网站死链检测工具

     [项目地址](https://github.com/Flowerowl/pylinktester)
    

    思路:通过线程管理器,触发爬虫线程按照广度优先爬取链接,另一方面触发检测线程用来检测爬取的链接。爬过的链接如果正常不用再检测,否则需要再检测(基于python2)。

        设计点:
        1. 考虑设置线程数、爬取深度;
        2. 处理链接超时,设置超时访问次数;
        3. 保存爬取链接集合,检测时设置未访问链接集合,不重复检测;
        4. 记录日志,生成文件;
        5. 爬虫线程,采用广度优先算法。
    
  • 站点链接有效性检查的python脚本

     [项目地址](https://github.com/TronGeek/CheckLinks-Python)
    

    思路:根据response内的a标签,遍历获取所有页面链接,包括图片、js、css链接,检测返回值是否为200(基于python3)。

        设计点:
        1. 缺点:单线程和未设置爬取深度导致程序运行效率低且可能无法自行结束循环遍历;
        2. 输出csv日志表格文件;
        3. 考虑检测url,以及图片、js、css链接;
        4. 进行链接分类,过滤掉站外链接;
        5. 可设置登录配置;
        6. 可设置邮件通知。
    

[思路二] 逆向思维

先列举事先规定要检测的链接,再判断链接有效性。
思路:先配置好需要检测的网页资源,再进行检测,检测网页能否正常打开以及里面的资源是否记载正常。

      设计点:
      1. 通过添加需要检测的网页来快速检测特点的网页,针对性强(前提是你知道需要事先知道并配置好待检测网页的具体url)。

结论

以上的死链检测方法,各有优缺点,可以视具体的测试场景灵活使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163373.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 免费申请国外免费域名超详细教程

    免费申请国外免费域名超详细教程1.首先申请免费域名网站:https://my.freenom.com/domains.php2.填入域名,这里我们以xcflag为列(尽量选择复杂一点的或者五个字母以上的域名,因为简单的有些域名是需要收费的),点击检查可用性。3.可以看到很多免费的域名(用的谷歌翻译插件,翻译有时候不是很准确,free翻译过来应该是免费而不是自由,之后会写一些关于谷歌插件的笔记,详细讲解)4.我们选择xcflag.tk点击立即获取,稍等一会点击购物车查看绿色按钮5.默认三个月试用,这里下拉框我们选择十二个月

  • LaTeX 插入图片失败[通俗易懂]

    LaTeX 插入图片失败[通俗易懂]LaTeX插入图片失败(引擎pdflatex)\includegraphics使用figure环境本身可正常编译,只使用\centering时\caption可正常插入。增加\includegraphics[width=10cm]{..}插入png图片时,报错100行,第101行报“Toomanyerrors.TeXstopped.”(已\usepackage{graphicx},不是旧包graphics的问题)几种报错语句重复出现,可能是循环错。“Missinge

  • python多任务—协程(一)

    python多任务—协程(一)写在前面:花了一周的时间,对协程做了一个简单的梳理,特别是异步编程asyncio库的使用,做了详细的说明。本文主要包括的知识点有:yield生成器的复习并实现协程的功能、greenlet库实现协程、gevent库实现协程、asyncio异步协程的介绍、异步协程的创建与运行、任务的创建与运行、并发运行gather/wait/as_complete/wait_for等方法的实现、异步协程的嵌套、aw…

  • 作业调度和进程调度的辨析题_进程调度的功能有哪些

    作业调度和进程调度的辨析题_进程调度的功能有哪些很多学习完《操作系统原理》这门课程的小伙伴都应该对“FCFS(先到先服务)”、“SJF(短作业优先)”等调度算法原理比较熟悉。但是在实际做题的时候,往往一不小心就把概念搞错,不容易区分“作业调度”和“进程调度”的区别。下面我主要针对这两个概念进行解析并给出经典习题解答。PS:本博客并不详解每种调度算法的原理,因此有这方面需求的小伙伴可以直接pass了。1、作业调度作业调度又称为高级调度,频度较低。其主要工作是将位于外存后备队列中的某个(或某几个)作业调入内存,排在就绪队列上。注意了,这个时候仅仅是将作

  • es6数组和对象常用方法

    es6数组和对象常用方法数组forEach()方法对数组的每个元素执行一次给定的函数。vararr=[1,2,3]arr.forEach((value,index)=>{console.log(‘数组值:’+value);console.log(‘数组索引:’+index);})map()方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。vararr=[1,2,3]vararr1=arr.map((value,in

  • siamfc-pytorch代码讲解(二):train&siamfc「建议收藏」

    siamfc-pytorch代码讲解(二):train&siamfc「建议收藏」siamfc-pytorch代码讲解(二):train&siamfc一、train.py二、siamfc.py2.1SiamFCTransforms2.2Pair2.3train_step下一篇这是第二篇的siamfc-pytorch代码讲解,主要顺着程序流讲解代码,上一篇讲解在这里:siamfc-pytorch代码讲解(一):backbone&headshowme…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号