【问题标题】:Has anyone used Chrome Lighthouse Node CLI to automate running audits (accessibility especially)? [closed]有没有人使用 Chrome Lighthouse Node CLI 来自动运行审计(尤其是可访问性)? [关闭]
【发布时间】:2021-12-31 01:20:33
【问题描述】:

有没有人使用 Google Chrome Lighthouse 的 Node CLI 版本来自动化网站审核过程? (我对可访问性审计最感兴趣,但我认为这个问题没有那个警告)。

我想知道是否有办法将其设置为抓取整个网站,而不仅仅是网页,如果您使用 Lighthouse 或任何类似的审计应用程序完成了此操作,您能否分享一些提示或示例?

如果您没有,当我们在我们的组织中发现时,这会是人们感兴趣的事情吗?

【问题讨论】:

  • 如果您想抓取网站,那么puppeteer 是另一种选择。:Puppeteer is a Node library which provides a high-level API to control headless Chrome over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome. 但我不确定它是否符合您对accessibility audits 的需求。
  • 您的网站是否支持任何类型、基本等的身份验证?

标签: node.js continuous-integration accessibility lighthouse


【解决方案1】:

您可以使用this post 中建议的方法。

您可以在配置文件中添加更多 URL 来抓取所有网站页面。您还可以从 BigQuery 中的所有测试结果中提取平均值,以获得所有网站页面的摘要。

【讨论】:

    【解决方案2】:

    FWIW 我创建了一个 Python 脚本,它将转换 Lighthouse 4 将 JSON 审计文件转换为通用日志格式并将结果附加到其中 每次运行。

    https://gist.github.com/joelhsmith/c36ad701d5d9beb598962dc62cc3d2df

    • 下一部分是让它定期运行。我让它运行 在 Docker 容器中。

    • 然后分析日志。我们将它们发送到 Splunk。我在 Splunk 中做到了这一点并取得了一些成功。搜索查询是史诗般的。它还允许我们制作一些非常漂亮的仪表板可视化。现在尝试在 Kibana 中做同样的事情。

    • 然后,我在 Splunk 中设置了分数变化时的电子邮件警报。

    如果将来有人希望以此为基础,希望这会有所帮助。我没有像我想要的那样好的整个解决方案,但是如果你想要更多细节,请随时联系我,未来的人类。

    我认为@tzam 的帖子对于其中的某些内容也是一个不错的选择。

    【讨论】:

      【解决方案3】:

      当然!

      我们使用它来将我们的网站与竞争对手进行比较,使用一个非常简单的 nodejs 应用程序,运行分析然后将结果存储到 elasticsearch,最后我们使用 kibana 进行数据可视化。

      这里代码来源:https://github.com/ebuildy/lighthouse-urls-bench/

      灯塔部分在这里https://github.com/ebuildy/lighthouse-urls-bench/blob/main/src/runnerLighthouse.mjs

      import lighthouse from 'lighthouse'
      import chromeLauncher from 'chrome-launcher'
      
      const runnerResult = await lighthouse(urlToCrawl, lhOptions, lhConfig)
      
      // transform results, keep only valid audits
      const auditsList = Object
              .values(runnerResult.lhr.audits)
              .filter(audit => {
                  return typeof audit.numericValue != 'undefined'
              }).map(audit => {
                  return {
                      id: audit.id,
                      title: audit.title,
                      numericValue: audit.numericValue,
                      numericUnit: audit.numericUnit,
                      displayValue: audit.displayValue
                  }
              })
      
      await store({
              '@timestamp' : new Date(),
              device: {
                  type: 'desktop'
              },
             url : urlToCrawl,
              auditsList
          })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 2021-09-20
        • 1970-01-01
        • 2010-10-24
        相关资源
        最近更新 更多