乐于分享
好东西不私藏

Web端适不适合AI纯视觉自动化测试

Web端适不适合AI纯视觉自动化测试

关于Web端自动化测试,大家熟知的方案早就很成熟了——Selenium、Playwright这类工具基于DOM结构进行元素定位和操作,稳定性高、可维护性强。但这几年AI视觉识别技术越来越靠谱,一个新问题就冒出来了:Web端要不要也搞纯视觉自动化?

我的看法是:这不是一个非此即彼的问题。纯视觉在Web端确实没有在移动端那么刚需,但在某些场景下确实能解决问题。

这篇文章会从实际项目经验出发,聊聊Web端纯视觉自动化在什么情况下值得用、什么情况下继续用传统方案就行。

Web端纯视觉方案全景

在展开讨论之前,有必要先梳理一下目前Web端纯视觉/视觉驱动自动化测试的几类方案。很多人容易把所有方案混为一谈,实际上它们的设计目标和适用场景差异很大。

视觉回归测试工具

这类工具的核心逻辑是**“看起来对不对”**,侧重视觉一致性的检测,适合上线前的截图对比回归。

Applitools 是这个领域的头部产品,自研的Visual AI引擎能区分"真正的视觉bug"和"正常的内容变化"。比如页面上的时间戳、广告banner这些动态内容,Applitools可以智能忽略,不会产生大量误报。对比精度确实是业界顶级水准,但使用成本也不低,适合视觉验证需求密集的中大型团队。

Percy(BrowserStack旗下)的思路更偏像素级对比,同时支持结构化截图分析,过滤动态数据的误报能力也不错。跟CI/CD流水线集成做得比较完善,触发时机和结果展示都集成得比较顺。如果已经在用BrowserStack做跨浏览器测试,顺手加上Percy是个自然的选择。

BackstopJS 是这个领域的开源方案代表,用headless浏览器做截图对比,配置简单、上手快。对于小团队或者视觉回归需求不那么复杂的项目,BackstopJS足够用了。当然,论智能化程度和对比精度,跟商业方案还是有差距的。

选这类工具的关键判断是:你的核心需求是不是视觉一致性回归? 如果是,这套方案很对口;如果还需要处理复杂的交互操作,就不太够用了。

AI原生浏览器自动化框架

如果说视觉回归工具是"看",那这类框架的核心定位是**“做”——像真人一样操作浏览器**。它们用大语言模型理解自然语言指令,直接规划并执行点击、输入、滚动等操作,理论上可以零代码、零选择器维护。

BrowserUse 是这个方向的标杆项目,GitHub 21k+ stars,基于Playwright加上LLM的规划能力。用户只要描述"我要在淘宝搜索一款耳机,按价格排序,选第一个",AI自动拆解步骤并执行。听起来很美好,但实际用下来有个问题:在WebArena这类标准基准上,BrowserUse的端到端成功率大概在35-40%之间,长流程任务容易走偏或者卡住。选择器维护成本确实降了,但换来的是结果可预测性下降。

Skyvern 走的是企业级路线,技术上用计算机视觉+LLM双引擎协同。在WebVoyager基准上达到了85.8%的成功率,这个数字比BrowserUse高不少。Skyvern比较适合的场景是结构相对固定的RPA流程,比如采购系统填单、发票识别录入这类场景——操作路径可预期,AI推理的成功率就高很多。

Midscene.js 是字节跳动开源的多模态方案,支持Web/Android/iOS三端,用Playwright作为底层操作引擎,中文支持是亮点。跟其他方案一样,它也能理解自然语言指令,但实际表现还是要看具体任务的复杂度。这个项目的好处是上手文档比较友好,踩坑记录也多。

选这类框架的关键判断是:你的业务流程是否相对结构化、容许一定程度的试错? 如果是,这类框架能显著降低脚本维护成本;如果要求100%确定性执行,那暂时还不太适合。

传统框架+视觉增强的混合方案

这是目前最务实的一条路:用传统方式定位操作,只在需要的地方加视觉验证

Selenium/Playwright写操作逻辑,截图对比做结果验证,OCR识别做内容断言。这套组合的好处是稳定性基本可控,视觉能力按需引入,不会把所有赌注都押在AI的"理解力"上。

很多团队其实已经在这么用了,只是没有系统化地归纳成一套方法论。我的建议是:先把传统方案做到位,再考虑视觉增强。不要一上来就ALL IN AI视觉,那会死得很惨。

Web端传统自动化的强项

先说个事实:Selenium/Playwright这套方案真的很稳

DOM树、CSS选择器、XPath,定位精准还稳定。Web页面本质上是一棵结构化的DOM树,每个元素都有唯一的身份标识。你可以写这样一段代码:

# Playwright示例page.locator("#username").fill("test_user")page.locator("button[type='submit']").click()assert page.locator(".success-message").is_visible()

这套方案的好处不用多说:

维度
表现
稳定性
DOM结构不变,定位就不失效
速度
直接操作DOM,无需渲染截图
可维护性
定位器语义清晰,代码好读好改
覆盖率
能验证接口数据、DOM属性等内部状态

对于大多数Web应用——尤其是自研的、结构规范的B/S系统——这套方案足够应对80%以上的测试场景。

但总有些场景搞起来很别扭

问题是,还有20%的场景,传统方案搞起来很别扭,甚至根本搞不了

跨应用流程

电商下单后跳转微信支付,支付完成再跳转回商城的回调页面——这种跨系统流程,你没法要求第三方系统的DOM结构配合你。每个系统维护一套定位器,一旦对方改版,自动化脚本就挂了。

Canvas/WebGL内容

数据可视化大屏、在线设计工具(Figma Web版)、游戏页面……这些内容根本不存在DOM元素可供定位。图表里某个数值对不对、某个图形渲染正不正常,你没法通过locator去检查。

// 你能操作Canvas,但无法读取Canvas内容const canvas = document.querySelector('#chart-canvas');const ctx = canvas.getContext('2d');// ctx拿到的是渲染上下文,里面是什么图?

第三方嵌入页面

广告投放页、OAuth登录页、客服聊天窗口——这些嵌入到你系统里的第三方页面,你既没有控制权,也拿不到完整的DOM结构。怎么验证它们正常加载、正常交互?

视觉一致性回归

页面重构后,按钮从左上角挪到了右下角,表格列宽从100px变成了120px——这类布局漂移、样式崩坏,DOM断言完全检测不到。但用户一眼就能发现。

纯视觉在Web端的3个真香场景

正是在这些搞不定的场景里,纯视觉方案能派上用场。

场景一:跨系统端到端流程

用纯视觉的思路处理跨系统流程,说白了就是**“不管你是谁,我只看你长什么样”**:

from airtest.core.api import *from poco import Poco# 初始化auto_setup(__file__, devices=["Windows:///"])# 电商下单流程 - 不关心跳转了什么系统touch(Template(r"tpl/add_to_cart.png", threshold=0.8))wait(Template(r"tpl/checkout_btn.png", threshold=0.75))touch(Template(r"tpl/checkout_btn.png"))# 跳转到微信支付 - 识别支付界面sleep(3)  # 等待第三方页面加载assert_exists(Template(r"tpl/wechat_pay_btn.png", threshold=0.85),               "微信支付按钮验证")# 支付完成 - 识别结果页wait(Template(r"tpl/payment_success.png", threshold=0.8), timeout=60)snapshot(msg="支付成功截图")

我之前负责的一个电商项目,引入纯视觉方案后,跨系统流程的自动化覆盖率从35%提升到了92%,维护成本下降了60%。原因很简单——不再需要为每个系统单独维护定位器了。

场景二:视觉断言替代DOM断言

对于Canvas渲染类内容,纯视觉验证确实能解决问题:

from ppocr import PaddleOCRimport cv2import numpy as npocr = PaddleOCR(lang='ch', use_angle_cls=True)def assert_chart_value(screenshot_path, expected_min, expected_max):    """    验证图表中的数值是否在合理范围内    """    img = cv2.imread(screenshot_path)    result = ocr.ocr(img, cls=True)    # 提取所有识别出的数值    values = []    for line in result[0]:        text = line[1][0]        # 尝试提取数值        try:            # 处理常见的数值格式            num_str = ''.join(filter(lambda x: x.isdigit() or x == '.', text))            if num_str and '.' in num_str:                values.append(float(num_str))        except:            continue    # 断言验证    assert all(expected_min <= v <= expected_max for v in values), \        f"图表数值超出预期范围: {values}"    return values# 验证MODEL_A车型销量图表values = assert_chart_value("model_a_sales_chart.png"050000)print(f"识别的销量数据: {values}")

实际测下来,对数据可视化页面的验证,纯视觉方案能发现DOM断言完全无法检测的问题,比如数值标签被截断、图例颜色与实际数据不匹配这些。在某报表系统测试中,纯视觉断言额外发现了17%的视觉类bug。

场景三:响应式多端验证

同一个页面在手机(375×667)、平板(768×1024)、桌面(1920×1080)上的布局可能完全不同。传统方案需要为每个分辨率写一套脚本,纯视觉方案可以用同一套逻辑覆盖:

def responsive_test(page_template, resolutions):    """    响应式测试 - 同一套视觉逻辑覆盖多分辨率    """    results = {}    for name, (width, height) in resolutions.items():        # 设置浏览器尺寸        page.set_viewport_size({"width": width, "height": height})        sleep(1)        # 截图        screenshot_path = f"screenshots/{name}_{width}x{height}.png"        page.screenshot(path=screenshot_path)        # 验证关键元素可见性        assert_exists(Template(screenshot_path),                       f"{name}分辨率下页面正常渲染")        results[name] = "PASS"    return results# 执行多端验证resolutions = {    "mobile": (375667),    "tablet": (7681024),    "desktop": (19201080)}results = responsive_test(page, resolutions)

AI Agent在Web端自动化测试中的应用

说到AI在Web端测试中的应用,很多人第一反应是"能不能直接用自然语言写测试脚本"。这个方向确实有人在做,也确实有一定效果,但离"完全替代人工"还差得远。聊聊现在实际能做到什么程度。

自然语言驱动测试

用描述代替代码,这是BrowserUse、Skyvern、Midscene这些框架的核心卖点。给一段简单的代码示例,展示"一句话描述任务→AI自动执行"的工作方式:

# 基于Midscene.js的Python封装示例from midscene import WebAgentagent = WebAgent()# 用自然语言描述任务,AI自动规划并执行agent.query(    task="在淘宝搜索'蓝牙耳机',按销量排序,点击第一个商品进入详情页",    model="gpt-4o")# 提取结果,AI理解页面内容后返回结构化数据product_info = agent.query(    task="提取这个商品的价格、月销量和店铺名称",    model="gpt-4o")print(f"提取结果: {product_info}")

这套玩法的优点很明显:降低写脚本的门槛。产品同学可以直接描述验收条件,测试同学可以从复杂的定位器维护中解放出来。但有个前提——任务描述得足够清晰,页面结构不能太离谱。如果页面经常改版、AI生成的执行路径每次都不一样,那维护成本反而更高。

智能定位与自愈

传统自动化最头疼的问题之一是:UI改版后,CSS选择器/XPath失效,一堆脚本得手动更新。AI定位的思路是用语义理解代替硬编码选择器,当UI变化时自动适配。

Testim的Smart Locator、Mabl的自愈机制是商业方案的代表。它们会记录元素的多维特征(位置、样式、上下文关系),当原来的定位器失效时,自动寻找语义最接近的元素。

一个被反复引用的案例是:某团队在持续迭代的项目中,UI版本更新了12次,测试脚本全程没有修改过一次。这个数字听起来很诱人,但需要注意几个前提——项目本身的页面结构相对稳定、AI引擎见过足够多的历史数据、允许一定的容错率。

对于开源方案,Playwright配合多模态模型也能实现类似效果:

# Playwright + 多模态模型的智能定位示例from openai import OpenAIimport base64client = OpenAI()def ai_smart_click(page, description):    """    用自然语言描述目标元素,AI识别并点击    """    # 截图当前页面    screenshot = page.screenshot()    # 调用多模态模型定位    response = client.chat.completions.create(        model="gpt-4o",        messages=[{            "role""user",            "content": [                {                    "type""image_url",                    "image_url": {                        "data": base64.b64encode(screenshot).decode('utf-8')                    }                },                {                    "type""text",                    "text"f"在截图中找到'{description}'对应的按钮或链接,返回其中心点坐标(x,y)"                }            ]        }]    )    # 解析坐标并点击    coords = parse_coordinates(response.choices[0].message.content)    page.mouse.click(coords['x'], coords['y'])# 使用示例ai_smart_click(page, "提交订单按钮")

这套方案比硬编码选择器灵活,但也带来新的问题:截图质量和模型识别精度都会影响点击准确度,调试起来没有传统定位器那么直观。

视觉断言与语义理解

传统的截图对比只能判断"像素一样不一样",但AI能更进一步:理解这是布局错误还是正常的内容变化

Applitools的Visual AI是商业方案的典型,它能区分:

  • 文字内容变了(价格从99改成199)→ 应该报bug
  • 时间戳变了(“当前时间: 10:30”)→ 可以忽略
  • 广告banner换了 → 可以忽略
  • 按钮位置漂移了 → 应该报bug

这套语义理解能力确实能大幅减少误报。不过免费方案也不是完全做不到,用PaddleOCR+多模态模型组合也能实现类似效果:

# 视觉异常智能检测from ppocr import PaddleOCRfrom openai import OpenAIdef detect_visual_anomaly(screenshot_path, baseline_path):    """    区分'内容变化'和'布局错误'    """    ocr = PaddleOCR(lang='ch')    client = OpenAI()    # 提取两图的文字内容    current_img = cv2.imread(screenshot_path)    baseline_img = cv2.imread(baseline_path)    current_text = ocr.ocr(current_img)    baseline_text = ocr.ocr(baseline_img)    # 调用AI判断变化类型    response = client.chat.completions.create(        model="gpt-4o",        messages=[{            "role""user",            "content"f"""对比两张截图的差异:            基线版本文字内容: {baseline_text}            当前版本文字内容: {current_text}            判断以下变化属于哪种类型:            1. 内容正常更新(如数据、时间戳变化)-> 返回'正常变化'            2. 布局错误(如元素位置漂移、样式崩坏)-> 返回'布局错误'            3. 功能异常(如缺少必要元素、样式异常)-> 返回'功能异常'            简要说明判断依据:"""        }]    )    return response.choices[0].message.contentresult = detect_visual_anomaly("current.png""baseline.png")

这套方案比纯像素对比智能很多,但响应速度和成本是实际落地时需要考虑的问题。每次截图都调一次大模型API,延迟和费用都不小。

当前AI Agent的局限性

说了这么多AI的好处,也得坦诚聊聊现在的局限。不是泼冷水,是希望大家有合理预期。

执行速度慢是第一个问题。每次操作都需要LLM推理,从接收指令→理解页面→生成操作→执行反馈,这个链路比直接用CSS选择器慢了不止一个量级。传统Playwright脚本1秒能完成的操作,AI方案可能需要10-30秒。如果你的测试集有几百个用例,这个时间差距会非常明显。

结果可预测性低是第二个问题。同样的输入,可能每次生成的操作路径都不一样。这在需要确定性执行的场景下是个硬伤。比如支付流程,你希望每次都按同样的步骤执行,不希望AI"灵机一动"走了别的路。

成功率还不够高。BrowserUse在WebArena基准上的35-40%成功率听起来不高,但要注意这个基准测试的是复杂多步骤任务。单步简单操作的成功率会高很多。所以AI方案更适合短流程、结构相对固定的场景,不适合超长链路。

成本问题不能忽视。每次交互都消耗Token,无论是调用OpenAI API还是部署本地模型,都有成本。大量回归测试跑下来,Token消耗很可观。有些团队做过测算,AI方案的用例执行成本是传统方案的5-10倍。

总结一下:AI Agent在Web测试中能做什么——自然语言生成脚本、智能定位、语义化断言。能做到什么程度——短流程、结构化任务有明显效果;长流程、高确定性需求还有差距。

Web端纯视觉需要注意的几个问题

说了这么多优点,也得泼点冷水。有几个关键问题不提前了解会遇到不少麻烦

问题一:动态加载时序比移动端更复杂

移动端SPA(单页应用)的动态加载已经够头疼了,Web端有过之而无不及:

  • 懒加载
    :图片、组件按需加载,加载时机不可预期
  • 骨架屏
    :Loading态和实际内容交替出现,截图时机难捕捉
  • 异步渲染
    :数据返回后分批次渲染,界面在"变化"中
  • 第三方脚本
    :广告、统计等第三方脚本的加载时机完全不受控
# 常见问题:页面看起来加载完了,实际还在渲染page.goto("https://example.com/dashboard")page.wait_for_load_state("networkidle")  # 网络空闲了sleep(2)  # 还得再等2秒让JS执行完# 这才敢截图

常用的解决办法是增加等待策略,不仅等网络,还要等关键元素出现。也可以用AI判断页面是否"稳定"——对比连续两张截图的差异。

问题二:浏览器渲染差异

同一个CSS,在Chrome和Firefox上可能渲染出完全不同的视觉效果:

  • 字体渲染
    :Windows和Mac的中文字体渲染差异明显
  • 颜色偏差
    :不同浏览器对同一颜色值的解析有偏差
  • 布局差异
    :flex/grid的某些属性在不同浏览器表现不一致

我们测试中发现,同一套视觉脚本在Chrome和Firefox上的误报率差异达到了8%。应对方法是针对不同浏览器设置不同的相似度阈值,或者把阈值整体调低提高容错性。

问题三:分辨率和缩放的影响

Windows系统的缩放设置(125%、150%)会直接影响截图内容和元素坐标:

系统缩放
实际像素
截图尺寸
影响
100%
1920×1080
1920×1080
125%
1536×864
1536×864
元素变小
150%
1280×720
1280×720
元素更小

解决办法是测试前锁定系统缩放为100%,或者在脚本中动态获取实际缩放系数并做坐标补偿。

选型决策框架

说了这么多,到底什么时候用纯视觉?给大家一个2×2矩阵作为参考:

象限
DOM可访问性
视觉验证需求
推荐方案
纯视觉方案
Airtest + PaddleOCR,Template matching,YOLO目标检测
混合方案
Selenium/Playwright + 关键步骤截图 + OCR验证
坐标点击方案
简单坐标回放,慎用于核心流程
传统DOM方案
Selenium/Playwright,CSS/XPath定位

选型原则很简单:先尝试DOM方案,当遇到DOM不可访问或需要视觉验证的场景时,再引入纯视觉作为补充。两者不是替代关系,是互补关系。

总结

回到最初的问题:Web端适不适合AI纯视觉自动化测试?

答案是:

不是"适不适合",而是"什么时候用"

纯视觉在Web端不是主力战场——DOM方案在稳定性、速度、可维护性上全面占优。但在跨系统流程、Canvas/WebGL内容、第三方嵌入、视觉一致性回归这些场景下,纯视觉方案确实能补上传统方案的短板。

移动端是纯视觉的主力战场,Web端是特种兵。两者配合使用,才能构建完善的端到端自动化测试体系。

AI Agent的加入给这个领域带来了新的可能性——自然语言驱动、智能定位、语义化断言,这些能力正在逐步成熟。但现阶段不应盲目乐观,AI方案更适合作为传统方案的补充,在结构化、短流程的场景中发挥作用,而不是全面替代现有体系。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-11 10:58:46 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/605506.html
  2. 运行时间 : 0.109994s [ 吞吐率:9.09req/s ] 内存消耗:4,722.42kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f122bd4e92e032ca8b3020d2d09d3395
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000536s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000719s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000290s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000255s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000531s ]
  6. SELECT * FROM `set` [ RunTime:0.000191s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000557s ]
  8. SELECT * FROM `article` WHERE `id` = 605506 LIMIT 1 [ RunTime:0.001863s ]
  9. UPDATE `article` SET `lasttime` = 1778468326 WHERE `id` = 605506 [ RunTime:0.022989s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000346s ]
  11. SELECT * FROM `article` WHERE `id` < 605506 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000529s ]
  12. SELECT * FROM `article` WHERE `id` > 605506 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000465s ]
  13. SELECT * FROM `article` WHERE `id` < 605506 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000609s ]
  14. SELECT * FROM `article` WHERE `id` < 605506 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002423s ]
  15. SELECT * FROM `article` WHERE `id` < 605506 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000758s ]
0.111680s