我有一个html文件,其中有各种html标签。这个html也有一堆表在它。我正在使用python处理这个文件。当浏览器(最好是chrome或firefox)渲染时,我如何找出大小(以像素为单位的长度x宽度)?
我基本上是在寻找当你在浏览器上做"检查元素"时的信息,你可以看到各种元素的大小。我想在我的python代码中访问这个大小。
我使用lxml来解析我的html,如果需要的话可以使用selenium。
编辑:添加了#node.js,以防我可以使用它在shell脚本中吐出所有表的大小,我可以在python中抓取它。
您将希望使用Selenium WebDriver在运行Python代码的计算机上安装的实际浏览器中打开HTML文件。
我不确定如何使用Selenium WebDriver API来找出渲染表的高度,但value_of_css_property
方法可能会做到这一点。
如果你可以调用shellscript, 和你可以使用Node.js,我假设你也可以安装和使用PhantomJS,这是一个headless WebKit端口。(即一个真正诚实的WebKit渲染器,只是不需要一个窗口来工作。)这将允许您使用Javascript和熟悉的web库来操作文档。作为一个例子,下面的代码为您设置了Stack Overflow站点左上角的标志元素的宽度:
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是否以及如何做任何缓存,如果它做了,它可能是有意义的重用相同的过程对同一站点的多个刮痧。