Как сохранить холст как PNG в Selenium?
Я пытаюсь сохранить элемент canvas как изображение в формате png. Это мой код прямо сейчас, но, к сожалению, он не работает:
import time
from selenium import webdriver
# From PIL import Imag.
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 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. Я также хотел бы видеть решение, которое не требует обрезки в конце скриншота.
Ответы
Ответ 1
Вы можете вызвать HTMLCanvasElement.toDataURL()
, чтобы получить холст в виде строки PNG base64. Вот рабочий пример:
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)