javascript - 如何选择 CSS Puppeteer/Node.js 中定义的图像名称?

标签 javascript node.js google-chrome-devtools puppeteer browser-automation

如何选择 CSS 中定义的图像名称?

我可以使用 JavaScript 选择 CSS 图像类,但如何获取该类中的图像名称?我想在 Puppeteer/Node.js 中执行此操作。

如果下面给出的类中的图像与 paper.gif 匹配,我想单击下面给出的此类。

类别:

.height-20 span a {
   background-image: url("paper.gif");
   background-color: #cccccc;
}

选择器:

let elements = document.querySelectorAll('.height-20 span a'); // Select all Products but how to get image inside this selector?

点击器:

 await page.click(".height-20 span a");

我想要实现的目标如下:

if(css image == paper.gif) {
await page.click(".height-20 span a");
}

最佳答案

您可以将 NodeList 转换为获取自document.querySelectorAll()到 Node 数组,然后您可以按包含 background-image 的元素过滤该数组等于'paper.gif':

const elements = [...document.querySelectorAll('.height-20 span a')].filter(e => {
  const background_image = window.getComputedStyle(e).backgroundImage.split('/').pop().replace(/[")]/g, '');
  return background_image === 'paper.gif';
});

这个实现可以放在 page.evaluate() 里面,你可以click()如果存在与给定条件匹配的元素,则返回该页面 DOM 范围内的元素:

await page.evaluate(() => {
  const elements = [...document.querySelectorAll('.height-20 span a')].filter(e => {
    const background_image = window.getComputedStyle(e).backgroundImage.split('/').pop().replace(/[")]/g, '');
    return background_image === 'paper.gif';
  });

  if (elements.length) {
    elements[0].click();
  }
});

关于javascript - 如何选择 CSS Puppeteer/Node.js 中定义的图像名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205334/

相关文章:

javascript - 堆栈溢出API的nodejs JSON.parse()

javascript - Google 如何在搜索引擎结果页面上呈现其结果

google-chrome-devtools - 如何从 Chrome 控制台复制堆栈跟踪?

javascript - 在 facebox 和 jquery 中选择复选框?

javascript - 如何使用 YUI 进行适当的内存管理以避免泄漏

node.js - AWS.Transfer 不是构造函数

node.js - grunt bower-install 填充的 bower 依赖项

javascript - 如何在普通 JavaScript 中切换多个类?

javascript - 在Minitest中,我可以触发页面JS并分析结果/响应吗

javascript - 评估脚本事件