当前位置: 首页 > 面试题库 >

如何在Selenium中将画布另存为PNG?

蒯宇定
2023-03-14
问题内容

我正在尝试将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中的解决方案。我还希望在屏幕快照的末尾看到不需要裁剪的解决方案。


问题答案:

您可以调用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)


 类似资料:
  • 我有一个画布元素,其中有一个绘图,我想创建一个按钮,当点击它时,它将把图像保存为一个png文件。因此它应该打开“保存、打开、关闭”对话框... 我使用这个代码 但当我在IE9中测试它时,一个新窗口打开了,上面写着“网页无法显示”,其url是: 有人知道怎么解决这个吗?

  • 问题内容: 我正在从事一个生成艺术项目,我希望允许用户从算法中保存生成的图像。总体思路是: 使用生成算法在HTML5 Canvas上创建图像 图像完成后,允许用户将画布作为图像文件保存到服务器 允许用户下载图像或将其添加到使用该算法制作的作品库中。 但是,我坚持第二步。在Google的帮助下,我找到了这篇博客文章,这似乎正是我想要的: 导致了JavaScript代码: 和相应的PHP(testSa

  • 除了把画布绘图保存到本地存储或离线数据库,我们也可以使用data URL把画布绘图保存为图像,以便用户再把它保存到本地计算机。本节,我们将获取画布绘图的data URL,再把它设置为image对象的源,以便用户可以右击,作为PNG图像进行下载。 绘制步骤 按照以下步骤,把画布绘图另存为图像: 1. 定义画布上下文,并绘制一幅云状图形: window.onload = function(){

  • 问题内容: 我想复制一个画布上的所有内容,然后在客户端将它们全部转移到另一个画布上。我认为我会使用and 方法来实现这一点,但是我遇到了一些问题。 我的解决方案是将其获取并存储在Javascript中的Image对象中,然后使用该方法将其放回原处。 但是,我相信该方法会返回一个带有64位编码标签的标签。这似乎不是一个有效的标签,(我总是可以使用一些RegEx删除它),但是子字符串之后的64位编码字

  • 我正在进行一个生成艺术项目,我希望允许用户保存从一个算法得到的图像。大意是: 使用生成算法在HTML5画布上创建图像 完成映像后,允许用户将画布作为映像文件保存到服务器 允许用户下载图像或将其添加到使用该算法生成的图像库中。 然而,我却被卡在了第二步上。经过谷歌的一番帮助,我找到了这篇博文,似乎正是我想要的: 这导致了JavaScript代码: 和相应的PHP(testsave.PHP): 但这似

  • 问题内容: 我是新手,现在遇到了麻烦。所以我需要做的就是将此数组另存为iPhone文件的json文件。 然后可以将其读回到另一个数组中。有人可以告诉我该怎么做吗?或提供确切的代码来完成此操作。 编辑:我发现了一个例子。这是他们设置数据的方式: 并且您可以通过以下方式访问它: 但是我需要能够执行同样的操作,但是需要保存在文档文件夹中的文件中。 问题答案: 我建议您使用SwiftyJSON框架。究其文