2016-06-17 3 views
0

私は以下のコードを使用してスクリーンショットを撮り、私が望む要素だけをトリミングします。しかし、Chromeはビューポートのスクリーンショットを取るだけなので、上部の数字はページの上部から数えているので大きすぎます。ビューポートに相対的な位置を取得する方法はありますか?セレン/パイソンを使用してビューポートに相対的な要素の位置を取得

element = browser.find_element_by_xpath(locator) 
browser.save_screenshot('screenshot.png') 
location = element.location 
size = element.size 
im = Image.open('screenshot.png')   
left = location['x'] 
top = location['y'] 
right = location['x'] + size['width'] 
bottom = location['y'] + size['height'] 
im = im.crop((int(left), int(top), int(right), int(bottom))) 
im.save('screenshot2.png') 

答えて

2

Iのスクロール位置を取得し、トップ番号

element = browser.find_element_by_xpath(locator) 
browser.execute_script("return arguments[0].scrollIntoView();", element) 
browser.execute_script("window.scrollBy(0, -150);") 
browser.save_screenshot('screenshot.png') 
location = element.location 
scroll = browser.execute_script("return window.scrollY;") 
size = element.size 
im = Image.open('screenshot.png')   
left = location['x'] 
top = location['y'] - scroll 
right = location['x'] + size['width'] 
bottom = location['y'] + size['height'] - scroll 
im = im.crop((int(left), int(top), int(right), int(bottom))) 
im.save('screenshot2.png') 
からそれを減算し、次いで、(ヘッダの下から外に出て)わずかにスクロール要素にスクロールすることによってそれを動作させることができました
+0

戻ってこれを答えとして受け入れることを忘れないでください。ありがとう。 – JeffC

+0

IE互換の "window.pageYOffset"を使用することもできます。 – LightBit

関連する問題