2016-05-12 34 views
0

我有問題,我無法解決的蟒蛇phantomjs。 element.location返回錯誤的位置。當我看到裁剪後的圖像時,它顯示了所需圖像的一部分,也是不需要的圖像。它完美的工作在firefox上,但不適用於phantomjs。蟒蛇phantomJS element.location返回錯誤的位置

這裏是代碼:

def screenOfElement(self, _element): 
    _location = _element.location 
    _size = _element.size 
    _wholePage = Image.open(StringIO.StringIO(base64.decodestring(self.webdriver.get_screenshot_as_base64()))) 

    _left = _location['x'] 
    _top = _location['y'] 
    _right = _location['x'] + _size['width'] 
    _bottom = _location['y'] + _size['height'] 

    return _wholePage.crop((_left, _top, _right, _bottom)) 

感謝。

回答

0

我發現只有一種解決方案可以工作。

方法1:

1)隱藏除所需的元件的一切:

with open('jquery-2.2.3.min.js', 'r') as jquery_js: 
    jquery = jquery_js.read() #read the jquery from a file 
    self.webdriver.execute_script(jquery) #active the jquery lib 
    self.webdriver.execute_script(""" 
     element = $('#mydiv').parent(); 
     while(element.parent().length) 
     { 
      element.parent().siblings().hide(); 
      element = element.parent(); 
     } 
    """) 

2)取屏幕截圖。

3)顯示,我們躲在每一個元素:

self.webdriver.execute_script(""" 
    element = $('#mydiv').parent(); 
    while(element.parent().length) 
    { 
     element.parent().siblings().show(); 
     element = element.parent(); 
    } 
""") 

但隨着該問題,當我們顯示所有元素,我們可能會顯示被隱藏之前那些。有時它也不起作用。

如果您使用phantomJS,可能視覺部分無關緊要。因此,更好的解決辦法是

方法2:

1)直接將所需元素內<body>

$('body').append($('#mydiv')) 

2)隱藏除需要一個所有元件:

$('body > :not("#mydiv")').hide(); 

3)再次顯示:

$('body > *)').show(); 

希望這可以幫助遇到同樣問題的人。