【发布时间】:2013-12-06 00:00:31
【问题描述】:
这几天我被一个相当棘手的问题困住了。我在node.js 中的变量中有一个自动生成的HTML 页面作为字符串。我需要找到一些 HTML 元素的高度并进行 HTML 操作(如标签创建、删除、追加、css 属性设置等)。
显然我需要先创建一个类似于 DOM 的 HTML 页面结构,然后再继续。
虽然对于 HTML 操作,我有很多选项,例如 cheerio、node.io、jsdom 等,但这些选项都不能让我找到节点处元素的高度。
所以在浪费了很多时间之后,我决定寻找更重的解决方案,比如在节点上实现一个无头浏览器(phantomjs 等)并通过纯 JavaScript 驱动元素offsetHeight。
谁能告诉我这样可以达到我的目标吗?哪种无头浏览器最适合这项任务?
如果我走错了方向,那么任何人都可以建议我任何其他可行的解决方案吗?
此时我已经准备好尝试任何事情了。
提前谢谢!!
注意:在我的特殊情况下,在客户端使用javascript 有很多问题,因为生成的 HTML 页面的内容应该被客户端用来粘贴到他的网站中。留下一个正在运行的 javascript 来重新构建 HTML 会让他在最后变得困难。
【问题讨论】:
-
听起来你走上了一条死胡同;真正的问题是为什么你认为你需要在服务器上获取元素的高度?我怀疑回答这个问题会导致你找到一个不涉及这样做的解决方案。在没有显示的情况下,元素的高度没有任何意义。因此,虽然您可以为此使用无头浏览器,但您必须告诉浏览器要模拟什么大小的窗口,这使得答案特定于该窗口大小,这实际上并没有更好而不仅仅是凭空挑选自己的答案。
-
许多 html 在渲染时设置它们的宽度和高度,当浏览器定义它的盒子模型时。我不认为你可以在服务器上得到它
-
这里不说CSS和跨浏览器的区别
-
同意@T.J.Crowder。你可能应该在你的 HTML 字符串中引入一些 JavaScript,它会在浏览器上执行,并且可以计算出元素的实际高度。
-
@T.J.Crowder 确实,在没有显示的情况下,元素的高度没有任何意义,但我需要该高度来准备自动生成的 HTML 以在客户端显示。我已经有一个客户端javascript来满足我的需求,但是由于页面的资源效率低下和“不干净”(我的老板想出了这个词),我需要将它迁移到服务器端。元素的高度是我完成迁移所需的最后一件事。
标签: javascript jquery html node.js headless-browser