44

我经常不得不与脆弱的遗留网站合作,这些网站在更新逻辑或配置时会以意想不到的方式中断。

我没有时间或了解创建Selenium脚本所需的系统。此外,我不想检查特定的用例——我想验证网站上的每个链接和页面。

我想创建一个自动化的系统测试,它将通过一个站点蜘蛛并检查断开的链接和崩溃。理想情况下,我可以使用一个工具来实现这一点。它应该具有尽可能多的以下功能,按优先级降序排列:

  • 通过脚本触发
  • 不需要人机交互
  • 跟踪所有链接,包括锚标记以及指向 CSS 和 js 文件的链接
  • 生成所有找到的 404、500 等的日志。
  • 可以在本地部署以检查 Intranet 上的站点
  • 支持基于 cookie/form 的身份验证
  • 免费/开源

那里有许多部分解决方案,例如FitNesseFirefox 的 LinkCheckerW3C 链接检查器,但它们都不能满足我的所有需求。

我想将此测试用于使用一系列技术和平台的项目,因此解决方案越便携越好。

我意识到这不能替代适当的系统测试,但是如果我有一种方便且可自动化的方法来验证网站的任何部分都没有明显损坏,那将非常有用。

4

9 回答 9

33

我们使用并且非常喜欢 Linkchecker:

http://wummel.github.io/linkchecker/

它是开源的、Python 的、命令行的、内部可部署的,并且可以输出为多种格式。当我们与他联系以解决问题时,开发人员非常乐于助人。

我们有一个 Ruby 脚本,它可以查询我们的内部网站数据库,使用每个站点的适当参数启动 LinkChecker,并解析 LinkChecker 提供给我们的 XML,以便为 CMS 中的每个站点创建自定义错误报告。

于 2009-11-06T22:25:19.100 回答
28

我使用Xenu 的 Link Sleuth来处理这类事情。快速检查一个/任何站点上的无死链接等。只需将其指向任何 URI,它就会抓取该站点上的所有链接。

来自网站的描述:

Xenu 的 Link Sleuth (TM) 检查网站是否有损坏的链接。链接验证在“正常”链接、图像、框架、插件、背景、本地图像映射、样式表、脚本和 Java 小程序上完成。它显示一个不断更新的 URL 列表,您可以按不同的标准对其进行排序。可以随时生成报告。

除了可编写脚本之外,它还满足您的所有要求,因为它是一个需要手动启动的 Windows 应用程序。

于 2009-10-31T20:27:55.490 回答
2

W3C 链接检查器不满足您列表的哪一部分?那将是我会使用的那个。

或者,twill(基于python)是一种有趣的小语言,用于这种事情。它有一个链接检查器模块,但我认为它不能递归地工作,所以这对爬虫不太好。但是,如果您对此感到满意,可以对其进行修改。我可能是错的,可能有一个递归选项。无论如何,值得一试。

于 2009-10-31T20:18:49.477 回答
2

您可能想尝试为此使用 wget。它可以抓取包含“页面必备”(即文件)的站点,并且可以配置为记录错误。我不知道它是否能为您提供足够的信息,但它是免费的,可在 Windows (cygwin) 和 unix 上使用。

于 2009-11-02T19:01:27.467 回答
1

InSite是一个商业程序,似乎可以做你想做的事情(没有使用过)。

如果我在你的立场,我可能会自己写这种蜘蛛......

于 2009-10-31T13:58:19.443 回答
1

我不确定它是否支持表单身份验证,但如果你能在网站上运行它,它会处理 cookie,否则我认为Checkbot会做你列表中的所有事情。我之前在构建过程中使用了一个步骤来检查站点上是否有任何损坏。网站上有一个示例输出

于 2009-11-02T19:29:40.367 回答
1

我一直喜欢用 linklint检查网站上的链接。但是,我认为它并不符合您的所有标准,尤其是可能依赖于 JavaScript 的方面。我也认为它会错过从 CSS 内部调用的图像。

但是对于蜘蛛所有的锚,它工作得很好。

于 2009-11-07T08:55:09.243 回答
0

尝试排序站点。它不是免费的,但似乎可以满足您的所有需求,甚至更多。

或者,来自同一家公司的PowerMapper有一个相似但不同的方法。后者将为您提供有关页面详细优化的较少信息,但仍会识别任何损坏的链接等。

免责声明:我对生产这些产品的公司有经济利益。

于 2009-11-07T10:41:01.263 回答
0

试试http://www.thelinkchecker.com它是一个在线应用程序,可以检查外链数量、页面排名、锚点、外链数量。我认为这是您需要的解决方案。

于 2014-01-18T22:20:18.537 回答