检查元素在 DOM 中是否在 Node.js 中可见

Check if element is visible in DOM in Node.js

我想检查元素在 Node.js 中的 DOM 中是否可见。我使用 jsdom library for getting DOM structure. There are 2 方法检查元素在客户端的可见性 javascript,但它不适用于 node.js.

中的 jsdom

1) offsetParent 属性 始终为 null,即使对于可见元素也是如此

2) dom.window.getComputedStyle(el).display returns block, 但元素的 css 规则是 display: none

const request = require('request');
const jsdom = require("jsdom");
const { JSDOM } = jsdom;

request({ 'https://crooked.com/podcast-series/majority-54/', jar: true }, function (e, r, b) {
  const dom = new JSDOM(b);
  test(dom);
});

const test = (dom) => {
  const hiddenElement = dom.window.document.querySelector('.search-outer-lg');
  const visibleElement = dom.window.document.querySelector('.body-tag-inner');
  console.log(dom.window.getComputedStyle(hiddenElement).display); // block
  console.log(visibleElement.offsetParent); // null
}

是否可以或以其他方式检查元素在 node.js 中在 DOM 中的可见性?

试试看没用

const  a1=dom.window.document.querySelector('.search-outer-lg');
  const coponentStyle= dom.window.getComputedStyle(a1)
  coponentStyle.getPropertyValue('display')
[![const  offsetParet=window.document.querySelector('.body-tag-inner').offsetParent][1]][1]

it return body hav class archive tax-podcast_type term-majority-54 term-98

// 将是 return none 在不使用 dom 的情况下在 consle 中尝试这个 显示这张图片 如果不行告诉我

绝招方法:)



function isHiddenElement(selector) {
    return (document.querySelector(selector).offsetParent === null)
}

if(isHiddenElement('.search-outer-lg')
{
  alert("element hidden");

}


我尝试了 puppeteer 而不是 jsdom,我得到了正确的 display 值。这是片段:

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto(uri);

  const searchDiv = await page.evaluate(() => {
    const btn = document.querySelector('.search-outer-lg');
    return getComputedStyle(btn).display;
  });

  console.log(searchDiv)
  await browser.close()
})()