【发布时间】:2019-04-14 14:36:26
【问题描述】:
如何为任何站点中的每个 DOM 节点创建屏幕截图?
我尝试使用无头浏览器(puppeteer),它仅在我知道某个元素的 XPath 或 Selector 时才有效。 但是如何才能接收所有元素的 XPath 或 Selector?
async function screenshotDOMElement(opts = {}) {
const padding = 'padding' in opts ? opts.padding : 0;
const path = 'path' in opts ? opts.path : null;
const selector = opts.selector;
if (!selector)
throw Error('Please provide a selector.');
const rect = await page.evaluate(selector => {
const element =
document.evaluate(selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (!element)
return null;
const {x, y, width, height} = element.getBoundingClientRect();
console.log (x,y,width,height)
return {left: x, top: y, width, height, id: element.id};
}, selector);
if (!rect)
throw Error(`Could not find element that matches selector: ${selector}.`);
return await page.screenshot({
path,
clip: {
x: rect.left - padding,
y: rect.top - padding,
width: rect.width + padding * 2,
height: rect.height + padding * 2
}
});
}
我还尝试使用HtmlAgilityPack (C#) 并通过 XPath 枚举 HtmlDocument 中的每个节点,但是这个 XPath 不能与 puppeteer 一起使用
我需要使用 puppeteer,因为它是 XPath 或 Selector 进行屏幕截图任务的最佳工具
谁能帮帮我?
【问题讨论】:
-
您的问题质量很低,您使用的是哪个库?
page是什么?我想帮忙,但我觉得我做不到,因为我错过了很多信息。如果page.evaluate循环遍历每个项目,为什么不在其中page.screenshot呢? -
@Tvde1 可能是。页面是万维网中的任何网页。您需要尝试创建 page.evaluate 循环并为其调用屏幕截图。这是常见且未解决的问题(获取任何网页上每个可用元素的屏幕截图) 上个月我试图获得结果 最后我的一步是“puppeteer”无头浏览器。请不要减少问题点。
-
说真的,
page是什么?你如何创建对象?它是一串HTML吗?是图书馆的吗?
标签: javascript node.js web