gpt4 book ai didi

javascript - 使用 Puppeteer 操作/设置 ShadowRoot 样式

转载 作者:行者123 更新时间:2023-12-01 00:58:42 28 4
gpt4 key购买 nike

我尝试截取 AMP Stories 的屏幕截图,但不使用声音和分享按钮。

当我发现有一个叫做shadow DOM的东西之后,我想知道如何在那里设置显示:无:

addStyleTag({content: '.i-amphtml-story-system-layer-buttons { display : none!important }'})

我想我是这样访问影子 DOM 的。

const shadowRootInnerHTML = await page.evaluate(() => {
return document.querySelector("body > amp-story > div").shadowRoot.innerHTML
});

这是我目前正在使用的,

const browser = await puppeteer.launch({
slowMo: 250,
args: [
'--disable-infobars',
]
});
const page = await browser.newPage()

await page.emulate({
name: 'iPhone1080x1920',
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
viewport: {
width: 360,
height: 640,
deviceScaleFactor: 3,
isLandscape: false
}
});

await page.goto(urlToTest, {
waitUntil: 'networkidle2',
timeout: 0
});

const textContent = await page.evaluate(() => {
return document.querySelector("body > amp-story > div").shadowRoot.innerHTML
});

最佳答案

Amp 页面在 amp-story 中有多个 div 元素。

我们可以执行这个普通的 JavaScript,它将隐藏放大器页面上的顶部幻灯片和共享按钮。

我在这段代码中添加了两种方法,您可以应用其中一种。

// there are multiple div elements inside amp-story
const elements = [...document.querySelectorAll("body > amp-story > div")];

elements.map(rootElement => {
// find the shadowRoot inside if it exists
const shadowRoot = rootElement.shadowRoot;

if (shadowRoot) {
/**
* WAY 1: Find the element and apply css to it directly
*/
// this holds the top share button and pagination slides
const element = shadowRoot.querySelector(
".i-amphtml-story-system-layer"
);

// forcefully hide the element
if (element) element.style.setProperty("display", "none", "important");

/**
* WAY 2: Append your own style to the <style> tag inside the amp shadowRoot
*/
shadowRoot.querySelector('style').innerHTML += `.i-amphtml-story-system-layer { display : none!important }`
}
});

基本上,

  • 查找 div
  • 获取shadowRoot
  • 要么找到元素并直接应用,要么向标记添加样式。

示例放大器页面上的结果:

amp page without top bar

关于javascript - 使用 Puppeteer 操作/设置 ShadowRoot 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306165/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com