2016-07-11 13 views
9

Bir tuval elemanını png görüntüsü olarak kaydetmeye çalışıyorum. Bu benim şu andaki kodum ama maalesef işe yaramıyor.Selenium'da tuvali PNG olarak nasıl kaydederim?

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

Python'da çözümü görmek istiyorum. Ekran görüntüsünün sonunda kırpma gerektirmeyen bir çözüm görmek isterim.

+0

Olası kopyalar (http://stackoverflow.com/questions/13832322/how-to -kaplama-ekran görüntüsü-of-a-spesifik-öğe-yerine-tüm-sayfa-usin) – JeffC

+0

... ya da daha iyisi, http://stackoverflow.com/questions/15018372/how-to-take -partial-ekran görüntüsü-selenyum-webdriver-in-python – JeffC

+0

Görüntüyü kırpmaktan başka bir çözüm görmek isterim. Sağladığınız ilk bağlantı Java. – Clone

cevap

8

Tuvali PNG base64 dizesi olarak almak için HTMLCanvasElement.toDataURL() numaralı telefonu arayabilirsiniz. İşte çalışma örneği: [? Selenyum Webdriver kullanarak tüm sayfa yerine belirli bir elementin ekran görüntüsü nasıl yakalanır]

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) 
ait
İlgili konular