2014-09-13 101 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