在Python中获取两个web元素之间的距离?

在Python中获取两个web元素之间的距离?,python,web,browser,distance,elements,Python,Web,Browser,Distance,Elements,说我有 <body> <div id="container1"><div> <div id="container2"><div> </body> 在浏览器中渲染后,是否有方法获取container1和container2之间的距离?对于距离,我指的是用户看到的两个元素之间的实际距离,以像素、英寸或其他任何单位表示。这非常依赖于平台/浏览器,但您可以尝试Selenium+PhantomJS。例如,让我们在

说我有

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


在浏览器中渲染后,是否有方法获取
container1
container2
之间的距离?对于距离,我指的是用户看到的两个元素之间的实际距离,以像素、英寸或其他任何单位表示。

这非常依赖于平台/浏览器,但您可以尝试Selenium+PhantomJS。例如,让我们在中查找两个链接之间的距离:

安装依赖项:

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
  • 安装NodeJS:
  • 安装phantomjs:
    npm-g安装phantomjs
  • 安装selenium:
    pip安装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等,您只需安装相应的web驱动程序并更改:

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

    作为渲染差异的一个例子,在Mac中使用Chrome时,我得到171px,而在Firefox中,我得到164px。

    如果没有渲染引擎,就不能真正渲染DOM并对其应用CSS。即使如此,如果用户在浏览器中配置了较大的默认字体大小,该怎么办?这可能会很好地影响这两个元素之间的距离,由于其他因素,每个用户的距离可能略有不同。顺便说一句,我最后做了自己的计算,因为我需要更复杂的计算,比如找到两个元素对角的最小距离。我所做的是将每个selenium对象转换为我库中的一个矩形,然后简单地得到两个矩形之间的距离。如果您试图获取元素和元素所在的容器之间的距离,会发生什么情况?这会产生
    0
    ?@Pithikos,如果没有填充,边距。。。设置,则是,它将为0。