Python 如何确定给定html文件的html表的大小(以像素为单位)

Python 如何确定给定html文件的html表的大小(以像素为单位),python,node.js,Python,Node.js,我有一个html文件,其中有各种html标记。这个html中还有一堆表。我正在使用python处理这个文件。当浏览器(最好是chrome或firefox)渲染时,我如何确定它的大小(长度x宽度,以像素为单位) 我基本上是在浏览器上进行“检查元素”时查找信息,您可以看到各种元素的大小。我想在python代码中访问这个大小 我正在使用lxml解析我的html,如果需要,可以使用selenium 编辑:添加了#node.js,以防我可以使用它在shell脚本中吐出所有表的大小,并且可以在python中

我有一个html文件,其中有各种html标记。这个html中还有一堆表。我正在使用python处理这个文件。当浏览器(最好是chrome或firefox)渲染时,我如何确定它的大小(长度x宽度,以像素为单位)

我基本上是在浏览器上进行“检查元素”时查找信息,您可以看到各种元素的大小。我想在python代码中访问这个大小

我正在使用lxml解析我的html,如果需要,可以使用selenium


编辑:添加了#node.js,以防我可以使用它在shell脚本中吐出所有表的大小,并且可以在python中获取它。

您需要使用它在运行python代码的计算机上安装的实际浏览器中打开HTML文件


我不确定您将如何使用Selenium WebDriver API来确定渲染表的高度,但可以这样做。

如果您可以调用shellscript,并且可以使用Node.js,我假设您也可以安装并使用Node.js,这是一个无头WebKit端口。(也就是说,一个真实的WebKit渲染器,它不需要窗口即可工作。)这将允许您使用Javascript和熟悉的web库来操作文档。作为一个示例,下面给出了logo元素朝向左上堆栈溢出站点的宽度:

page = require('webpage').create(); // create a new "browser"

page.open('http://stackoverflow.com/', function() {
  // callback when loading completes
  var logoWidth = page.evaluate(function() {
    // This runs in the rendered page and uses the version of jQuery that SO loads.
    return $('#hlogo').width();
  });

  console.log(logoWidth); // prints 250, the same as Chrome.

  phantom.exit(); // for some reason you need to exit manually
});
PhantomJS的文档将告诉您更多关于如何使用它的信息


然而,需要注意的是,加载页面需要一段时间,因为它需要获取CSS和脚本,并且通常执行浏览器执行的所有操作。我不确定PhantomJS是否以及如何进行缓存,如果它进行缓存,那么对同一站点的多个刮片重复使用相同的过程可能是有意义的。

这取决于浏览器,可能是平台,视口大小。。。例如,使用的字体呈现将影响字符串的前进,从而可能影响表格的宽度。实际上,您必须在浏览器中呈现页面。如果您使用的是Selenium,难道您不能用它打开页面并执行Javascript来确定大小吗?@millimoose是的,为了解决这些问题,我提到我可以使用任何浏览器,但更喜欢chrome/firefox。我还说过,我想访问python代码中的大小(我知道我可以使用javascript获得大小),因为没有浏览器真正支持python脚本,而您必须使用真正的浏览器(例如Selenium)才能获得合理的结果,这些要求是相互矛盾的。如果您可以从Python驱动Selenium,那么您还应该能够告诉底层浏览器为您运行一些JS,并将结果返回给调用的Python代码。
node.JS
没有任何渲染代码,因此这可能对您没有帮助。它只是一个javascript引擎。如果你能调用一个shell脚本,我只会使用PhantomJS。总有或其他类似Python的东西。@millimoose:aha,听起来更有可能。