我正在编写一些使用Chrome DevTools协议控制Chrome的测试代码。打开网页后,我需要从网页中获取图像。很容易获得图像URL,但我想从Chrome获得实际图像,而不需要重新下载它们。这将帮助测试运行得更快,因为测试客户端和web服务器之间的带宽有限。它还将帮助测试模拟与web服务器的更真实的交互。
有没有一种使用Chrome DevTools协议获取图像的方法?我想我可以拍一张每张照片的截图,但是我更喜欢不被修改的图像。或者,是否有一种方法可以从注入浏览器的脚本中访问图像?
发布于 2019-03-26 22:56:11
我想你可以用木偶师来做这个:
傀儡机是一个节点库,它提供了一个高级API来通过DevTools协议控制Chrome或Chromium。傀儡机默认运行无头,但可以配置为运行完全(非无头)铬或铬。
下面是一个访问这个问题的脚本,并在加载所有映像后立即将它们保存到磁盘中:
const {writeFileSync} = require('fs');
const puppeteer = require('puppeteer');
let counter = 0;
const whenImage = fn => async res => {
  const contentType = res.headers()['content-type']
  if (contentType && contentType.startsWith('image/')) {
    fn(await res.buffer());
  }
};
puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  page.on('response', whenImage(content => writeFileSync(`img_${counter++}`, content)));
  await page.goto('https://stackoverflow.com/q/55366906/1244884');
  await browser.close();
});https://stackoverflow.com/questions/55366906
复制相似问题