# -*- coding: utf-8 -*- import re, os html = open('/data/workspace/index.html', encoding='utf-8').read() # 提供的图片清单 provided = [ "Image260912145011448da1.png", # banner "Image260912150141232b5c.png", # about "Image26090315575044706c.jpg", "Image260903155749806b4c.jpg", "Image260903155750166216.jpg", "Image260903155749869e3e.jpg", "Image260903155750384bcb.jpg", "Image26090315574999406b.jpg", "Image2609031557497138d3.jpg", "Image260903155750119fdf.jpg", ] # 城市分站域名(不得作为图片引用,也不是素材图片) city_domains = ["layouwei.com","51mplg.com","szbla.com","bfcmgg.com","836188.com","buhuihua.com","aixixin.com"] results = [] # 1. 三要素 def meta(name): m = re.search(r'([^<]*)', html) results.append(("1. title三要素非空", bool(title and title.group(1).strip()), title.group(1) if title else "缺失")) results.append(("1. keywords三要素非空", bool(meta('keywords')), meta('keywords'))) results.append(("1. description三要素非空", bool(meta('description')), meta('description')[:40]+'...')) # 2. 无表单/输入/用户输入 has_form = bool(re.search(r']+src="([^"]+)"', html) bad_img = [u for u in imgs if not any(p in u for p in provided)] results.append(("3. 图片全部来自提供清单", len(bad_img)==0, "引用图数:%d, 异常:%s"%(len(imgs), bad_img))) # 4. Banner 使用指定png + 比例1920x1000 用 aspect-ratio results.append(("4a. Banner使用指定banner图", any("Image260912145011448da1" in u for u in imgs), "")) results.append(("4b. Banner宽高比1920/1000(aspect-ratio)", "1920/1000" in html, "")) results.append(("4c. 关于我们配图使用指定png", any("Image260912150141232b5c" in u for u in imgs), "")) # 5. 广告法:检查绝对化禁用词 forbidden = ["最","第一","顶级","全网最优","最好","唯一","极致","首选","国家级","绝对"] found_bad = [w for w in forbidden if w in html] results.append(("5. 无绝对化禁用词(广告法)", len(found_bad)==0, "命中:%s"%found_bad)) # 6. 响应式断点覆盖 bps = [1920,1440,1280,1100,1024,768,375] css = html # 检查是否定义了关键 max-width 断点(768、375) results.append(("6a. 含768px移动端断点", "@media (max-width:768px)" in css, "")) results.append(("6b. 含375px移动端断点", "@media (max-width:375px)" in css, "")) # 导航在移动端折叠(menu-toggle + 汉堡菜单) results.append(("6c. 移动端折叠菜单(menu-toggle)", "menu-toggle" in css and "nav-links" in css, "")) results.append(("6d. 导航默认横向flex(单行)", "nav-links{display:flex" in css or ".nav-links{display:flex" in css, "")) # 7. 各板块存在 sections = ["products","about","scenes","cases","service","faq","city","certs","links"] for s in sections: results.append(("7. 板块存在 #%s"%s, 'id="%s"'%s in html, "")) # 8. 无虚构案例/证书文字(证书仅"预留",案例用通用描述——检查是否出现具体虚构客户名) results.append(("8. 无ICP备案信息", "ICP" not in html and "icp" not in html and "备案号" not in html, "")) # 9. 友情链接模块存在(允许为空链接) results.append(("9. 友情链接模块", 'id="links"' in html, "")) print("="*70) ok = 0 for name, passed, extra in results: print(("%-40s [ %s ] %s"%(name, "✅ 通过" if passed else "❌ 未通过", extra))) ok += passed print("="*70) print("通过: %d / %d"%(ok, len(results)))