javascript - (Puppeteer) 有没有办法通过 x, y 获取元素查询?
问题描述
我想通过传递 x,y 坐标来获取元素查询选择器。
或者可能满足坐标的元素很少。
也许我可以做 mouse.click(x, y) 然后获取被点击的元素,但我不希望页面采取任何行动来获取元素的查询。
有可能这样做吗?
解决方案
如果您只需要视口坐标的最顶层元素,您可以尝试DocumentOrShadowRoot.elementFromPoint()
. 如果您需要组成一个唯一的选择器,您可以尝试处理来自的元素数组DocumentOrShadowRoot.elementsFromPoint()
(在下面的示例中添加更多检查 - 类、ID、属性、子项计数和顺序等):
'use strict';
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
await page.goto('https://example.org/');
console.log(await page.evaluate(() => {
return document.elementFromPoint(100, 100).tagName;
}));
console.log(await page.evaluate(() => {
return document.elementsFromPoint(100, 100)
.map(({ tagName }) => tagName).reverse().join(' > ');
}));
await browser.close();
} catch (err) {
console.error(err);
}
})();
DIV
HTML > BODY > DIV
推荐阅读
- c - 即使我的条件得到验证,为什么不返回 true
- r - rasterFromXYZ 警告:数据长度不是行数的约数或倍数
- javascript - 如何在全日历中查看基于月份的数据
- angular - Ionic 3 - 带有标题的 Angular Post 不起作用
- javascript - 如何使用 jQuery 对一组元素的值求和?
- symfony - 无法使用 Loader 或 Fileloader 从捆绑包中加载 routes.yaml 配置
- python - Plotly 破折号服务器端缓存
- javascript - 摩纳哥编辑器加载主题没有实例
- xml - 在 XSLT 中使用 position() 检索多个同名节点
- drupal - 限制 Drupal 8 中顶级菜单项的数量