Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式测量元素';使用python的HTML源代码中的大小?_Python_Html_Dom - Fatal编程技术网

如何以编程方式测量元素';使用python的HTML源代码中的大小?

如何以编程方式测量元素';使用python的HTML源代码中的大小?,python,html,dom,Python,Html,Dom,我正在用python做网页布局分析。一项基本任务是在给定HTML源代码的情况下,以编程方式测量元素的大小,以便获得网页语料库的内容/广告比率、广告块位置、广告块大小的统计数据 一种明显的方法是使用宽度/高度属性,但它们并不总是可用。此外,加载到DOM后需要计算width:50%。因此,我想将HTML源代码加载到窗口大小预定义的浏览器(例如,尽管我不确定是否可以设置窗口大小)是一种很好的尝试方式,但mechanize无论如何都不支持返回元素大小 在python中有没有通用的方法(没有宽度/高度属性

我正在用python做网页布局分析。一项基本任务是在给定HTML源代码的情况下,以编程方式测量元素的大小,以便获得网页语料库的内容/广告比率、广告块位置、广告块大小的统计数据

一种明显的方法是使用宽度/高度属性,但它们并不总是可用。此外,加载到DOM后需要计算
width:50%
。因此,我想将HTML源代码加载到窗口大小预定义的浏览器(例如,尽管我不确定是否可以设置窗口大小)是一种很好的尝试方式,但mechanize无论如何都不支持返回元素大小

在python中有没有通用的方法(没有宽度/高度属性),最好是使用一些库


谢谢

要正确获得所有最终大小,需要呈现内容,考虑所有CSS样式表,可能还有所有javascript。因此,从Python程序中获取大小的唯一方法是使用Python实现完整的web浏览器,使用可以这样做的库,或者远程引导浏览器关闭进程


后面的方法可以通过使用Selenium工具来完成—请检查如何从Python程序中获得javascript表达式的结果:

我建议您看看用Python编写的webkit web客户端。它支持JavaScript,因此您可以轻松调用JavaScript函数并获取其返回值。 示例显示如何查找google文本框宽度:

>>> from ghost import Ghost
>>> ghost = Ghost()
>>> ghost.open('https://google.lt')
>>> width, resources = ghost.evaluate("document.getElementById('gbqfq').offsetWidth;")
>>> width
541.0  # google text box width 541px

伙计,我甚至不能让我的元素在IE和Firefox中呈现到相同的大小。如果有一种“官方”的方法来计算尺寸,你可以打赌,一半的市场忽略了这一点,并以他们自己的方式来做。只是给你指出一个方向——可能想看看WebKit和其他渲染器作为输出提供了什么。显然不会得到三叉戟,但WK/壁虎可能足够好了…@Kevin你的担心肯定是正确的。但出于(实证)研究的目的,我会坚持使用任何能够做到这一点的浏览器。我知道在IE和Firefox中,有些元素并没有呈现为相同的大小,我也受到了影响。但这真的有很大的区别吗?我不担心这里的几个像素漂移:)这非常有用。然而,我希望Ghost有一个API文档。