提问者:小点点

使用ChromeDriver和Selenium在Python通过cygwin启动的Chrome浏览器下载csv文件后失败路径过长错误


我尝试从selenium启动的Chrome浏览器下载csv文件。

但是

Failed- Path too long error

下载csv文件时发生。

路径:

C:/s/d/b

我改变路径如下,但同样的错误…

/cygdrive/c/s/d/a
\cygdrive\c\s\d\a
\\cygdrive\\c\\s\\d\\a


csv文件

20181213171306.csv

ChromeDrive路径

/cygdrive/c/Users/HOGEHOGE/chromedriver_2.45.exe

使用cygwin,执行下面这样的python脚本。

python3 C:/s/d/a.py


我像下面这样设置了Web驱动程序选项。

DIR_DL="C:/s/d/b"
options = Options()
options.add_experimental_option("prefs", {
  "download.default_directory":DIR_DL,
})
driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,chrome_options=options)
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': DIR_DL}}
command_result = driver.execute("send_command", params)


有人知道如何解决这个问题吗?

“失败-路径太长”是日语。意思是“失败-路径太长错误”。

[环境]
Windows 10
CYGWIN_NT-10.0 2.11.2
Python3.6.4
selenium 3.141.0
chrome驱动2.45
chrome浏览器71


共3个答案

匿名用户

尝试使用双斜杠作为路径名:

C:\d\s\b

还可以尝试在web驱动程序的init上设置驱动程序页面下载选项。

driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': "/path/to/download/dir"}}
command_result = driver.execute("send_command", params)

匿名用户

尝试使用add_argument设置下载目录

options = Options()
options.add_argument("download.default_directory=C:/s/d/b")
driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, chrome_options=options)

匿名用户

此错误消息…

Failed-Path Too Long

…表示ChromeDriver无法与(最近)下载的文件交互。

根据讨论错误错误-“路径太长”…错误应该是“文件已打开”,当WebDriver实例(即驱动程序尝试过早使用下载的文件)时会观察到此问题。

错误快照:

在twp步骤之间诱导一些等待:

  • 下载csv文件。
  • 使用csv文件执行下一个操作。