【问题标题】:How to determine the size of html table in pixels given an html file如何在给定html文件的情况下确定html表格的大小(以像素为单位)
【发布时间】:2013-04-07 01:04:56
【问题描述】:

我有一个包含各种 html 标签的 html 文件。这个 html 里面还有一堆表格。我正在使用 python 处理这个文件。当它由浏览器(最好是chrome或firefox)呈现时,我如何找出大小(长x宽,以像素为单位)?

当您在浏览器上执行“检查元素”时,我实际上是在寻找信息,并且您能够看到各种元素的大小。我想在我的 python 代码中访问这个大小。

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

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

【问题讨论】:

  • 这取决于浏览器,可能是平台,视口大小......例如使用的字体渲染将影响文本字符串的前进,从而可能影响表格的宽度。您几乎必须在浏览器中实际呈现页面。如果你使用 Selenium,你不能直接用它打开页面并执行 Javascript 来确定大小吗?
  • @millimoose 是的,为了解决这些问题,我提到过我可以使用任何浏览器,但首选 chrome/firefox。我还说我想在我的 python 代码中访问大小(我知道我可以使用 javascript 获取大小)
  • 鉴于没有浏览器实际上支持 python 脚本,并且您必须使用真正的浏览器(通过例如 Selenium)才能获得合理的结果,这些要求是矛盾的。如果你可以从 Python 驱动 Selenium,你也应该能够告诉底层浏览器为你运行一些 JS 并将结果返回给调用 Python 代码。
  • node.js 没有任何渲染代码,所以这可能对您没有帮助。它只是一个 JavaScript 引擎。
  • 如果你可以调用 shell 脚本,我会使用 PhantomJS。

标签: python node.js


【解决方案1】:

您将希望使用Selenium WebDriver 在运行 Python 代码的计算机上安装的实际浏览器中打开 HTML 文件。

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

【讨论】:

【解决方案2】:

如果你可以调用shellscript,并且你可以使用Node.js,我假设你也可以安装和使用PhantomJS,这是一个headless WebKit 端口。 (即一个真正诚实的 WebKit 渲染器,它不需要窗口即可工作。)这将让您使用 Javascript 和熟悉的 Web 库来操作文档。举个例子,下面的代码让你得到了 Stack Overflow 站点左上角的 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 是否以及如何进行任何缓存,如果这样做,对同一站点的多个抓取重用相同的进程可能是有意义的。

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2011-11-19
    • 2014-10-28
    • 2021-06-02
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多