Skip to content

Instantly share code, notes, and snippets.

@hideki-a
Created October 28, 2019 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hideki-a/773d40be06df9014c9daca8c16429ea5 to your computer and use it in GitHub Desktop.
Save hideki-a/773d40be06df9014c9daca8c16429ea5 to your computer and use it in GitHub Desktop.
{
"name": "research-axe-core",
"version": "1.0.0",
"description": "",
"main": "run-axe.js",
"scripts": {
"start": "node run-axe.js > report.csv && nkf -s --overwrite report.csv"
},
"author": "Hideki Abe",
"dependencies": {
"array-foreach-async": "^1.0.1",
"axe-core": "^3.4.0",
"axe-reports": "^1.1.11",
"fast-xml-parser": "^3.14.0",
"puppeteer": "^2.0.0"
}
}
// 参考: https://www.mitsue.co.jp/knowledge/blog/a11y/201903/07_1700.html
require('array-foreach-async');
const fs = require('fs');
const parser = require('fast-xml-parser');
const puppeteer = require('puppeteer');
const AXE_SOURCE = require('axe-core').source;
const AXE_LOCALE_JA = require('axe-core/locales/ja.json');
const AxeReports = require('axe-reports');
(async () => {
const browser = await puppeteer.launch();
// const deviceMobile = puppeteer.devices['iPhone 8'];
const userAgentString = await browser.userAgent();
const devicePC = {
'name': 'Chrome',
'userAgent': userAgentString,
'viewport': {
'width': 1280,
'height': 600,
'deviceScaleFactor': 1,
'isMobile': false,
'hasTouch': false,
'isLandscape': false
}
};
AxeReports.createCsvReportHeaderRow();
const sitemap = fs.readFileSync('sitemap.xml', {encoding: "utf-8"});
const sitemapJSON = parser.parse(sitemap);
await sitemapJSON.urlset.url.forEachAsync(async (item) => {
if (!item.loc) {
return;
}
const page = await browser.newPage();
await page.setBypassCSP(true);
// ページ読み込み
await page.emulate(devicePC);
await page.goto(item.loc);
// axeを注入して実行
await page.evaluate(`eval(${JSON.stringify(AXE_SOURCE)});`);
const results = await page.evaluate((config, context, options) => {
/* eslint-env browser */
const {axe} = window;
axe.configure(config);
return axe.run(context || document, options || {});
}, {locale: AXE_LOCALE_JA});
// 結果を確認
if (results.violations) {
AxeReports.createCsvReportRow(results);
}
await page.close();
});
await browser.close();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment