2016-05-12 6 views
0

私は解決できなかったpython selenium phantomjsに問題があります。 element.locationは間違った場所を返します。切り抜かれた画像を見ると、それは所望の画像の一部と望ましくない画像の一部を示している。それは完全にfirefoxで動作しましたが、phantomjsでは動作しません。python selenium 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:

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(); 
    } 
""") 

しかし、それとの問題を。また、時にはうまくいきません。

おそらく視覚的な部分は問題ではありません。だから、より良い解決方法2

に次のようになります。

1)<body>内部で直接要素を必要として移動:

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

2)必要なものを除いて、すべての要素を非表示にする:

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

3)再度表示:

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

誰もが同じ問題を抱えていることを願っています。

関連する問題