一个用于比较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" />
相同。- 空内容的
style
或class
属性(例如,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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6cd2fc939367ead8f33c3f3939f33dfb1eb073c7c486fa348125689176b97f06 |
|
MD5 | 9241fe09f0258fa7998e2507b27fdd18 |
|
BLAKE2b-256 | fdc2afc180f71f8b51ed3d954f45ce26ada0c1bb18a3f0f85386c8355e7a2c73 |
HTMLCompare-0.3.2-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | def6b62ffb29dc76f3e7cc8f82538127990fd4b8025921fac6e3542e8ca023bf |
|
MD5 | c060f5e1784b7bbe963a1c1d731db728 |
|
BLAKE2b-256 | 4b90251243d39c5f8c3c0b46ed489992b53d987cd7261b847347ad768c32c932 |