我正在使用 Bokeh 包生成地图以显示模拟结果。输出是具有交互性的 html 格式的单个地图。个别地图需要交互性。
有关示例,请参见此链接:
http://docs.bokeh.org/en/0.10.0/docs/gallery/texas.html
模拟可以自动设置为运行多次,每次运行都会生成一张地图。这可能是 100 张地图。我希望能够将地图拼接在一起以制作电影 - 这不需要交互性。 Bokeh 具有通过浏览器创建 PNG 文件的功能,因此可以手动将每个地图保存为文件并使用 ffmpeg 创建电影。但是,如果您需要对 100 个文件执行此操作,则这不是一个真正的选项。目前没有办法通过 Bokeh 自动生成 PNG 文件,但我相信它会在某个时候添加。
所以我需要一个解决方法。我的想法是从存储在本地驱动器上的位置打开每个 html 文件,截屏,裁剪图像以保留所需的部分并保存。但我还没有找到有效的解决方案。
裁剪图像很容易:
from PIL import Image
img = Image.open(file_name)
box = (1, 1, 1000, 1000)
area = img.crop(box)
area.save('saved_image', 'jpeg')
我的问题是打开 html 文件并首先截取屏幕截图以提供给上面的代码。
为此,我尝试了以下方法,但两者都需要 URL 而不是 html 文件。两者都使用对我不起作用的 Firefox,但我已经安装了 chrome 并适当地更改了代码。
如何在 python 中使用 Selenium WebDriver 进行部分截图?
http://www.idiotinside.com/2015/10/20/take-screenshot-selenium-python/
我的代码是:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('file_name')
driver.save_screenshot('image.png')
driver.quit()
哪个返回:
{"code":-32603,"message":"Cannot navigate to invalid URL"}
显然文件名不是 url,所以很清楚。如果您将它传递给一个网站,它就可以正常工作。任何帮助加载 html 和拍摄照片的帮助将不胜感激!它不必涉及硒。
原文由 Pete 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Bokeh
0.12.6
,现在可以更轻松地直接从 Python 获取这些屏幕截图,而无需打开浏览器。导出 PNG 看起来像这样
导出 SVG 看起来像这样
有一些可选的依赖项需要安装。您可以 在用户指南的导出图部分 找到更多信息。