Lighthouse 自定义审计怎么获取页面的 DOM 节点?
我在写 Lighthouse 的自定义审计时,想在 audit 方法里拿到页面上某个特定元素,比如 document.querySelector('#my-button'),但直接这么写报错了,说 document 未定义。是不是不能直接操作 DOM?那该怎么访问页面的真实节点呢?
我查了文档,看到好像要用 driver 或者 evaluateAsync,但试了几次都不对。比如下面这样写:
const buttonExists = await driver.evaluateAsync(
'!!document.querySelector("#my-button")'
);
结果返回的是 undefined,完全不知道哪里出问题了……有没有人成功做过类似的事情?
如果返回 undefined,先确认选择器是否正确,以及元素是否在 DOM 中。可以这样写:
然后在 audit 阶段用
this.auditContext.gatherers[0]或者通过products拿到这个数据。简单说就是:gather 阶段用 driver 拿数据,audit 阶段用拿到的数据做审计,别在 audit 里直接查 DOM。