跳转到主要内容

一个用于比较HTML时忽略非功能差异的库

项目描述

htmlcompare

一个Python库,用于确保两个HTML文档是“相等的”。目前功能非常有限,但该库应该自动忽略这些差异,因为它们与HTML语义不相关(例如,<img style=""><img>相同,style="color: black; font-weight: bold"style="font-weight:bold;color:black;"相等)。

用法

import htmlcompare

diff = htmlcompare.compare('<div>', '<p>')
is_same = bool(diff)

为了简化测试,库提供了一些辅助工具

from htmlcompare import assert_different_html, assert_same_html

assert_different_html('<br>', '<p>')
assert_same_html('<div />', '<div></div>')

实现的功能

  • 忽略HTML标签之间的空白
  • <div />被处理为<div></div>
  • HTML属性的顺序不重要:<div class="…" style="…" /><div style="…" class="…" />被视为相等
  • 忽略HTML注释(是的,不幸的是也包括条件注释
  • class属性内CSS类的顺序不重要:<div class="foo bar" /><div class="bar foo" />相同。
  • 空内容的styleclass属性(例如,style="")被认为与缺失的style/class属性相同。
  • 内联样式声明使用实际的CSS解析器进行解析:顺序、空白和尾随分号不重要(仅限Python 3.5+)
  • 0px在内联CSS中被视为等于0

局限性/计划

仅支持基本CSS。在 style 属性中的声明使用 tinycss2(Python 3.5+)进行解析,因此声明的顺序和多余的空白不应影响。由于 tinycss2 不支持 Python 2 和 3.4,因此在这里的帮助仅限于移除 style 属性中的尾随 ;。目前完全忽略 <style> 标签的内容(即使使用 tinycss2)。

不验证条件注释。不清楚可以使用哪个库,但将来很可能需要这项功能。

JavaScript - 由于明显的原因,实现完美的 JS 比较是不可能的,但可能可以运行某种“美化器”来处理微小的风格变化。然而,我不需要这个功能,因此不太可能实现(除非有人贡献)。

自定义钩子可以帮助将比较适应您的特定需求。然而,我不知道哪个 API 是最好的,因此这将等待有实际用例出现。

更好的API:当前的 API 非常基础,仅实现了我现在需要的功能。我希望在使用此项目更复杂的场景中改进 API。

其他项目

xmldiff 是一个成熟的用于比较两个 XML 文档的项目。然而,代码似乎不包含特定 HTML 语义(例如 CSS、空属性、不重要的属性顺序)的知识。

杂项

代码采用 MIT 许可协议。它支持 Python 2.7 和 Python 3.4+,尽管一些功能仅在 Python 3.5+ 上可用。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

HTMLCompare-0.3.2.tar.gz (8.6 kB 查看哈希

上传时间

构建分布

HTMLCompare-0.3.2-py2.py3-none-any.whl (11.4 kB 查看哈希

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面