使用 puppeteer 来使用 CSS @media 规则
Using puppeteer to get used CSS @media rules
我已经编写了一个小节点应用程序,它将使用 puppeteer 和 Headless Chrome 来抓取其使用过的网站 CSS。
它很好用,除了一件事:它没有 grab @media
规则?
const puppeteer = require('puppeteer');
const util = require('util');
const fs = require("fs");
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.coverage.startCSSCoverage();
await page.goto('http://localhost');
await page.setViewport({width : 320, height : 640});
const css_coverage = await page.coverage.stopCSSCoverage();
console.log(util.inspect(css_coverage, { showHidden: false, depth: null }));
await browser.close();
let final_css_bytes = '';
let total_bytes = 0;
let used_bytes = 0;
for (const entry of css_coverage) {
final_css_bytes = "";
total_bytes += entry.text.length;
for (const range of entry.ranges) {
used_bytes += range.end - range.start - 1;
final_css_bytes += entry.text.slice(range.start, range.end) + '\n';
}
filename = entry.url.split('/').pop();
fs.writeFile('./'+filename, final_css_bytes, error => {
if (error) {
console.log('Error creating file:', error);
} else {
console.log('File saved');
}
});
}
})();
有谁知道为什么 @media
规则没有包含在最终输出中,当页面有很多规则时?
我相信这是铬本身的行为。如果您检查了 chrome 开发工具的代码覆盖率,使用的 css 将不包含 media-queries 的定义。只有实际的选择器可用。
font-faces 和关键帧也是如此。 font-face.
甚至还有一个 issue in chromium
要提取页面中使用的 css,您可以查看类似 minimalcss
的内容
我将此报告为 Chrome 中的错误,并且已移至 Chromium:
https://bugs.chromium.org/p/chromium/issues/detail?id=983887
希望有一天能添加此功能。
我已经编写了一个小节点应用程序,它将使用 puppeteer 和 Headless Chrome 来抓取其使用过的网站 CSS。
它很好用,除了一件事:它没有 grab @media
规则?
const puppeteer = require('puppeteer');
const util = require('util');
const fs = require("fs");
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.coverage.startCSSCoverage();
await page.goto('http://localhost');
await page.setViewport({width : 320, height : 640});
const css_coverage = await page.coverage.stopCSSCoverage();
console.log(util.inspect(css_coverage, { showHidden: false, depth: null }));
await browser.close();
let final_css_bytes = '';
let total_bytes = 0;
let used_bytes = 0;
for (const entry of css_coverage) {
final_css_bytes = "";
total_bytes += entry.text.length;
for (const range of entry.ranges) {
used_bytes += range.end - range.start - 1;
final_css_bytes += entry.text.slice(range.start, range.end) + '\n';
}
filename = entry.url.split('/').pop();
fs.writeFile('./'+filename, final_css_bytes, error => {
if (error) {
console.log('Error creating file:', error);
} else {
console.log('File saved');
}
});
}
})();
有谁知道为什么 @media
规则没有包含在最终输出中,当页面有很多规则时?
我相信这是铬本身的行为。如果您检查了 chrome 开发工具的代码覆盖率,使用的 css 将不包含 media-queries 的定义。只有实际的选择器可用。
font-faces 和关键帧也是如此。 font-face.
甚至还有一个 issue in chromium要提取页面中使用的 css,您可以查看类似 minimalcss
的内容我将此报告为 Chrome 中的错误,并且已移至 Chromium:
https://bugs.chromium.org/p/chromium/issues/detail?id=983887
希望有一天能添加此功能。