【发布时间】: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(显示系统默认下载文件夹)
但到目前为止没有任何效果,任何帮助将不胜感激!
注意: 我知道可以通过使用 requests、urllib3 等模块发出 GET 请求来下载文件。我只是在寻找硒基于解决方案。
【问题讨论】:
-
您是否检查过用户可以访问该目录。因为我也使用相同的
prefs = {"download.default_directory": dl_location}。这对我来说很完美。 -
是的,我做到了。我什至继续尝试以 root 身份运行脚本。所以,许可应该不是问题。我尝试将
"download.default_directory"设置为 vps 上不存在的文件夹。这个技巧帮助我将 pdf 保存在系统的默认目录中,但是,如果我写了一些其他现有的目录路径,那么它不会下载,这很奇怪!
标签: python selenium google-chrome selenium-chromedriver vps