2016-07-11 6 views
9

मैं एक पीएनजी छवि के रूप में एक कैनवास तत्व को बचाने की कोशिश कर रहा हूं। यह अभी मेरा कोड है लेकिन दुर्भाग्यवश, यह काम नहीं करता है।सेलेनियम में पीएनजी के रूप में कैनवास को कैसे बचाया जाए?

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

मैं पायथन में समाधान देखना चाहता हूं। मैं एक ऐसा समाधान भी देखना चाहूंगा जिसके लिए स्क्रीनशॉट के अंत में फसल की आवश्यकता नहीं है।

+0

संभावित डुप्लिकेट (http://stackoverflow.com/questions/13832322/how-to -कैप्चर-द-स्क्रीनशॉट-ऑफ-ए-विशिष्ट-तत्व-बल्कि-पूरे-पेज-usin) – JeffC

+0

... या बेहतर अभी तक, http://stackoverflow.com/questions/15018372/how-to-take -partial-screenshot-selenium-webdriver-in-python – JeffC

+0

मैं छवि को फसल करने के अलावा अन्य समाधान देखना चाहता हूं। आपके द्वारा प्रदान किया जाने वाला पहला लिंक जावा है। – Clone

उत्तर

8

आप पीएनजी बेस 64 स्ट्रिंग के रूप में कैनवास प्राप्त करने के लिए HTMLCanvasElement.toDataURL() पर कॉल कर सकते हैं। यहाँ एक काम कर उदाहरण है: [? कैसे सेलेनियम 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) 
की
संबंधित मुद्दे