Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Altair使用selenium chromedriver自动将图表另存为svg_Python_Selenium_Selenium Chromedriver_Altair - Fatal编程技术网

Python Altair使用selenium chromedriver自动将图表另存为svg

Python Altair使用selenium chromedriver自动将图表另存为svg,python,selenium,selenium-chromedriver,altair,Python,Selenium,Selenium Chromedriver,Altair,我试图在一个循环中生成几个图表并自动保存它们 我正在使用Chrome操作Windows 我一直在关注如何在svg中保存图表 我下载了适合我的Chrome版本的ChromeDriver。 gdf是我的地理数据框架,一切都很顺利,我可以生成并手动保存图表 下面是我正在尝试运行的一段代码: #Chromedriver for headless run and chart automatic save from selenium import webdriver driver = webdriver.

我试图在一个循环中生成几个图表并自动保存它们

我正在使用Chrome操作Windows

我一直在关注如何在svg中保存图表

我下载了适合我的Chrome版本的ChromeDriver。
gdf
是我的地理数据框架,一切都很顺利,我可以生成并手动保存图表

下面是我正在尝试运行的一段代码:

#Chromedriver for headless run and chart automatic save
from selenium import webdriver

driver = webdriver.Chrome('pathtochromedriver/chromedriver_win32/chromedriver.exe')

#loop
for group in gdf['Group Name'].unique():
    map_1km_json = json.loads(gdf[gdf['Group Name']==group].to_json())
    map_1km_data = alt.Data(values=map_1km_json['features'])
    data_1km_geojson = alt.InlineData(values=map_1km, format=alt.DataFormat(property='features',type='json'))
    domain=[1,2]
    range_=['#b0d247','#007bd1']
    choro1_5 = alt.Chart(map_1km_data).mark_geoshape().encode(
        alt.Color('properties.Cat2:O', scale=alt.Scale(domain=domain, range=range_),title = "Havvandsstigning"),
        #alt.Color('properties.Cat2', type='quantitative', scale=alt.Scale(scheme='plasma'),title = "Havvandsstigning")
        tooltip = ['properties.dd_km1:N','properties.Cat2:N']
    ).properties(
    width=1100,
    height=800
    )
    (background + choro1_5).save("{}.svg".format(bank))
driver.quit()
运行代码会打开一个空的新chrome窗格(在后台),如下所示:

但代码返回以下错误:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
~\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py in start(self)
     75                                             stderr=self.log_file,
---> 76                                             stdin=PIPE)
     77         except TypeError:

~\Anaconda3\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    774                                 errread, errwrite,
--> 775                                 restore_signals, start_new_session)
    776         except:

~\Anaconda3\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
   1177                                          os.fspath(cwd) if cwd is not None else None,
-> 1178                                          startupinfo)
   1179             finally:

FileNotFoundError: [WinError 2] The system cannot find the file specified

During handling of the above exception, another exception occurred:

WebDriverException                        Traceback (most recent call last)
<ipython-input-27-6067387e4b2f> in <module>
     19     height=800
     20     )
---> 21     (background + choro1_5).save("{}.svg".format(bank))
     22 driver.quit()

~\Anaconda3\lib\site-packages\altair\vegalite\v3\api.py in save(self, fp, format, override_data_transformer, scale_factor, vegalite_version, vega_version, vegaembed_version, **kwargs)
    478         if override_data_transformer:
    479             with data_transformers.disable_max_rows():
--> 480                 result = save(**kwds)
    481         else:
    482             result = save(**kwds)

~\Anaconda3\lib\site-packages\altair\utils\save.py in save(chart, fp, vega_version, vegaembed_version, format, mode, vegalite_version, embed_options, json_kwds, webdriver, scale_factor, **kwargs)
    102                                         vegaembed_version=vegaembed_version,
    103                                         webdriver=webdriver,
--> 104                                         scale_factor=scale_factor, **kwargs)
    105         if format == 'png':
    106             write_file_or_filename(fp, mimebundle['image/png'], mode='wb')

~\Anaconda3\lib\site-packages\altair\utils\mimebundle.py in spec_to_mimebundle(spec, format, mode, vega_version, vegaembed_version, vegalite_version, **kwargs)
     54                               vega_version=vega_version,
     55                               vegaembed_version=vegaembed_version,
---> 56                               vegalite_version=vegalite_version, **kwargs)
     57         if format == 'png':
     58             render = base64.b64decode(render.split(',', 1)[1].encode())

~\Anaconda3\lib\site-packages\altair\utils\headless.py in compile_spec(spec, format, mode, vega_version, vegaembed_version, vegalite_version, scale_factor, driver_timeout, webdriver)
    152             webdriver_options.add_argument('--no-sandbox')
    153 
--> 154     driver = webdriver_class(options=webdriver_options)
    155 
    156     try:

~\Anaconda3\lib\site-packages\selenium\webdriver\chrome\webdriver.py in __init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options, keep_alive)
     71             service_args=service_args,
     72             log_path=service_log_path)
---> 73         self.service.start()
     74 
     75         try:

~\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py in start(self)
     81                 raise WebDriverException(
     82                     "'%s' executable needs to be in PATH. %s" % (
---> 83                         os.path.basename(self.path), self.start_error_message)
     84                 )
     85             elif err.errno == errno.EACCES:

WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
---------------------------------------------------------------------------
FileNotFoundError回溯(最近一次调用上次)
启动中的~\Anaconda3\lib\site packages\selenium\webdriver\common\service.py(self)
75 stderr=self.log_文件,
--->76标准偏差=管道)
77除类型错误外:
初始化中的~\Anaconda3\lib\subprocess.py(self、args、bufsize、executable、stdin、stdout、stderr、preexec\fn、close\fds、shell、cwd、env、universal\u换行符、startupinfo、creationflags、restore\u信号、start\u new\u会话、pass\fds、编码、错误、文本)
774错误读取,错误写入,
-->775恢复信号,启动新会话)
776除:
执行子进程中的~\Anaconda3\lib\subprocess.py(self、args、executable、preexec\u fn、close\u fds、pass\u fds、cwd、env、startupinfo、creationflags、shell、p2cread、p2cwrite、c2pread、c2pwrite、errread、errwrite、未使用的恢复信号、未使用的启动新会话)
1177 os.fspath(cwd)如果cwd不是None-else-None,
->1178(创业信息)
1179最后:
FileNotFoundError:[WinError 2]系统找不到指定的文件
在处理上述异常期间,发生了另一个异常:
WebDriverException回溯(最近一次调用上次)
在里面
19高度=800
20     )
--->21(背景+choro1_5).保存(“{}.svg.”格式(银行))
22.退出
保存中的~\Anaconda3\lib\site packages\altair\vegalite\v3\api.py(self、fp、format、override\u data\u transformer、scale\u factor、vegalite\u version、vega\u version、vegaembed\u version、**kwargs)
478如果超越数据变压器:
479带有数据转换器。禁用最大行()
-->480结果=保存(**kwds)
481其他:
482结果=保存(**kwds)
保存中的~\Anaconda3\lib\site packages\altair\utils\save.py(图表、fp、vega\U版本、vegaembed\U版本、格式、模式、vegalite\U版本、嵌入选项、json\U kwds、webdriver、比例因子、**kwargs)
102 vegaembed_版本=vegaembed_版本,
103 webdriver=webdriver,
-->104比例系数=比例系数,**kwargs)
105如果格式==“png”:
106写入文件或文件名(fp,mimebundle['image/png'],mode='wb')
~\Anaconda3\lib\site packages\altair\utils\mimebundle.py在spec\u-to\u mimebundle中(spec、格式、模式、vega\u版本、vegaembed\u版本、vegalite\u版本、**kwargs)
54织女星版本=织女星版本,
55 vegaembed_版本=vegaembed_版本,
--->56 vegalite_版本=vegalite_版本,**kwargs)
57如果格式==“png”:
58 render=base64.b64解码(render.split(',,1)[1].encode())
编译规范中的~\Anaconda3\lib\site packages\altair\utils\headless.py(规范、格式、模式、vega版本、vegaembed版本、vegalite版本、比例因子、驱动程序超时、webdriver)
152 webdriver_选项。添加_参数('--no sandbox')
153
-->154驱动程序=webdriver\u类(选项=webdriver\u选项)
155
156尝试:
~\Anaconda3\lib\site packages\selenium\webdriver\chrome\webdriver.py in\uuuuuuu init\uuuuu(self、可执行路径、端口、选项、服务参数、所需功能、服务日志路径、chrome选项、保持活动状态)
71服务参数=服务参数,
72日志路径=服务日志路径)
--->73自助服务启动()
74
75尝试:
启动中的~\Anaconda3\lib\site packages\selenium\webdriver\common\service.py(self)
81提出WebDriverException(
82“'%s'可执行文件需要位于路径中。%s”%(
--->83 os.path.basename(self.path)、self.start\u错误消息)
84                 )
85 elif err.errno==errno.EACCES:
WebDriverException:消息:“chromedriver”可执行文件需要位于路径中。请看https://sites.google.com/a/chromium.org/chromedriver/home

上述解决方案(顺便说一句,都是相同的)都没有解决我的问题。我已经给了
chromedriver.exe
一个绝对路径,并在路径不起作用之前添加了
可执行文件\u path=r
。当我遇到这个问题时,是因为我没有运行
brew cask install chromedriver
,它将可执行文件安装到我路径上的某个位置。我相信当您使用altair进行保存时,它会查找与python分离的chromedriver可执行文件。您是否尝试将
pathtochromedriver/chromedriver\u win32/chromedriver.exe
添加到您的路径,而不是使用
selenium
导入路径?