2016-07-11 60 views
9

Sto cercando di salvare un elemento canvas come immagine png. Questo è il mio codice adesso ma, sfortunatamente, non funziona.Come salvare una tela come PNG nel selenio?

import time 
from selenium import webdriver 
#from PIL import Image 

driver = webdriver.Firefox() 
driver.get('http://www.agar.io') 
driver.maximize_window() 
driver.find_element_by_id('freeCoins').click() 

time.sleep(2) 

# the part below does does not seem to work properly 

driver.execute_script('function download_image(){var canvas = document.getElementByTagName("canvas");canvas.toBlob(function(blob) {saveAs(blob, "../images/output.png");}, "image/png");};') 

Mi piacerebbe vedere la soluzione in Python. Mi piacerebbe anche vedere una soluzione che non richiede il ritaglio alla fine dello screenshot.

+0

Possibile duplicato (http://stackoverflow.com/questions/13832322/how-to -capture-the-screenshot-of-a-specifico-element-piuttosto-than-whole-page-usin) – JeffC

+0

... o meglio ancora, http://stackoverflow.com/questions/15018372/how-to-take -partial-screenshot-with-selenium-webdriver-in-python – JeffC

+0

Mi piacerebbe vedere una soluzione diversa dal dover ritagliare l'immagine. Il primo link che fornisci è Java. – Clone

risposta

8

È possibile chiamare HTMLCanvasElement.toDataURL() per ottenere la tela come stringa PNG base64. Ecco un esempio di lavoro: [? Come catturare lo screenshot di un elemento specifico, piuttosto che tutta la pagina utilizzando Selenio WebDriver]

import base64 
from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("http://curran.github.io/HTML5Examples/canvas/smileyFace.html") 

canvas = driver.find_element_by_css_selector("#canvas") 

# get the canvas as a PNG base64 string 
canvas_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(21);", canvas) 

# decode 
canvas_png = base64.b64decode(canvas_base64) 

# save to a file 
with open(r"canvas.png", 'wb') as f: 
    f.write(canvas_png)