2016-05-12 12 views
0

Ich habe ein Problem mit Python Selen phantomjs, die ich nicht lösen konnte. element.location gibt den falschen Standort zurück. Wenn ich ein beschnittenes Bild sehe, zeigt es einen Teil des gewünschten Bildes und auch einen unerwünschten. Es hat auf firefox perfekt funktioniert, funktioniert aber nicht auf phantomjs.Python selen phantomJS element.location gibt falschen Ort zurück

Hier Code:

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)) 

Dank.

Antwort

0

Ich habe nur eine Lösung gefunden, die funktioniert.

Methode 1:

1) alles außer benötigte Element ausblenden:

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) Nehmen Sie Screenshot.

3) jedes Element zeigen, dass wir versteckt:

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

Aber das Problem mit diesem ist, nachdem wir alle Element zeigen, könnten wir diejenigen zeigen, die vor versteckt waren. Manchmal funktioniert es auch nicht.

Wenn Sie phantomJS verwenden, sind visuelle Teile wahrscheinlich egal. So würde eine bessere Lösung zu

Methode 2:

1) Bewegen Sie benötigte Element direkt in <body>:

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

2) Wie bitte Element außer benötigt man:

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

3) Nochmals anzeigen:

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

Hoffe das hilft wer dasselbe Problem angetroffen hat.

Verwandte Themen