2014-09-13 102 views
1

说我有获取Python中两个Web元素之间的距离?

<body> 
    <div id="container1"><div> 
    <div id="container2"><div> 
</body> 

有没有办法让container1container2之间的距离,在浏览器中呈现了之后?距离是指用户在两个元素之间看到的实际距离,无论是像素,英寸还是其他。

+0

不是没有渲染引擎实际渲染DOM并将CSS应用到它。即使如此,如果用户在他的浏览器中配置了大的默认字体大小呢?这可能会非常好地影响这两个元素之间的距离,并且由于其他因素,每个用户可能会略有不同。 – 2014-09-13 09:02:14

+0

顺便说一句,我结束了我自己的[库](https://github.com/Pithikos/python-rectangles),因为我需要更复杂的计算,例如找到两个元素的最小距离对角**。我所做的就是将每个硒对象转换为我的库中的矩形,然后简单地获取两个矩形之间的距离。 – Pithikos 2015-01-21 10:08:46

回答

1

这是非常依赖于平台/浏览器,但您可以尝试Selenium + PhantomJS。例如让发现在main Wikipedia page两个环节之间的距离: enter image description here

安装依赖:

  1. 安装的NodeJS:
  2. 安装phantomjs:npm -g install phantomjs
  3. 安装硒:pip install selenium

的Python:

from selenium import webdriver 

driver = webdriver.PhantomJS() 
driver.set_window_size(1024, 768) 
driver.get('http://en.wikipedia.org/wiki/Main_Page') 

main_page_link = driver.find_element_by_css_selector('#n-mainpage-description a') 
help_link = driver.find_element_by_css_selector('#n-help a') 

help_link.location['y'] - main_page_link.location['y'] 
# 159 px 

使用Chrome/Firefox的等你只需要安装相应的网络驱动器和变化:

driver = webdriver.Chrome() # or 
driver = webdriver.Firefox() 

由于渲染差异的例子,为Chrome浏览器的Mac我得到171px而在Firefox中我得到了164px。

+0

我有一个小问题。如果尝试获取元素和元素所在的容器之间的距离,会发生什么情况?这会产生'0'吗? – Pithikos 2014-09-14 10:45:27

+0

@Pithikos,如果没有填充,边距,...设置,那么是的,它将是0。 – elyase 2014-09-14 11:52:54