【问题标题】:Selenium Python Set Chrome Default Download directory in VPSSelenium Python 在 VPS 中设置 Chrome 默认下载目录
【发布时间】:2020-01-28 13:59:23
【问题描述】:

我正在尝试在 Ubuntu 16.04 LTS VPS 服务器上使用最新的 google-chrome 和 chromedriver 下载 pdf,代码如下。

import json
import time
from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1768, 1368))
display.start()
chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless')
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-popup-blocking")
chrome_options.add_argument("--disable-logging")
chrome_options.add_argument("--log-level=3")
chrome_options.add_argument("--kiosk-printing")
appState = {
    "recentDestinations": [{"id": "Save as PDF", "origin": "local"}],
    "selectedDestinationId": "Save as PDF",
    "version": 2,
}

prefs = {
    "printing.print_preview_sticky_settings.appState": json.dumps(appState),
    "download": {
        "default_directory": "/path/to/dir/",
        "prompt_for_download": False,
        "directory_upgrade": True,
    },
}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(
    "https://www.adobe.com/content/dam/acom/en/accessibility/products/acrobat/pdfs/acrobat-x-accessibility-checker.pdf"
)
time.sleep(10)
driver.execute_script("window.print();")
time.sleep(30)
driver.quit()
display.stop()

当我在本地测试上述代码时,它会将文件下载到系统默认下载目录而不是path/to/dir,但无论如何都会下载文件。

但是,相同的代码在 VPS 服务器中执行时不会下载任何内容。

到目前为止我尝试过的事情:

  • 使用locate -i *.pdf找到脚本下载的任何pdf(它确认没有下载新的pdf)
  • 使用设置环境变量:export XDG_DOWNLOAD_DIR='path/to/dir'
  • 运行命令:xdg-user-dirs-update --set DOWNLOAD path/to/dir
  • 已验证默认下载目录使用命令设置:xdg-user-dir DOWNLOAD(显示系统默认下载文件夹)

但到目前为止没有任何效果,任何帮助将不胜感激!

注意: 我知道可以通过使用 requestsurllib3 等模块发出 GET 请求来下载文件。我只是在寻找硒基于解决方案。

【问题讨论】:

  • 您是否检查过用户可以访问该目录。因为我也使用相同的prefs = {"download.default_directory": dl_location}。这对我来说很完美。
  • 是的,我做到了。我什至继续尝试以 root 身份运行脚本。所以,许可应该不是问题。我尝试将 "download.default_directory" 设置为 vps 上不存在的文件夹。这个技巧帮助我将 pdf 保存在系统的默认目录中,但是,如果我写了一些其他现有的目录路径,那么它不会下载,这很奇怪!

标签: python selenium google-chrome selenium-chromedriver vps


【解决方案1】:

我遇到了类似的问题,并能够找到以下解决方案:

download.default_directory 设置仅适用于下载的内容。 Chrome 以不同的方式处理保存在页面上的文件。要更改页面打印输出的默认文件夹,只需设置 savefile.default_directory 值即可。

要更新窗口打印的下载目录,请使用以下命令更新您的首选项:

prefs = {
    "printing.print_preview_sticky_settings.appState": json.dumps(appState),
    "download": {
        "default_directory": "/path/to/dir/",
        "prompt_for_download": False,
        "directory_upgrade": True,
    },
    "savefile.default_directory": "path/to/dir/"
}

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2016-04-03
  • 2016-05-28
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2021-02-13
相关资源
最近更新 更多