【问题标题】:Selenium Webdriver: How to Download a PDF File with Python?Selenium Webdriver:如何使用 Python 下载 PDF 文件?
【发布时间】:2017-08-26 05:57:11
【问题描述】:

我正在使用 selenium webdriver 自动下载几个 PDF 文件。我得到 PDF 预览窗口(见下文),现在我想下载该文件。如何使用 Google Chrome 作为浏览器来完成此操作?

【问题讨论】:

标签: python selenium pdf download automation


【解决方案1】:

试试这个代码,它对我有用。

options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {
"download.default_directory": "C:/Users/XXXX/Desktop", #Change default directory for downloads
"download.prompt_for_download": False, #To auto download the file
"download.directory_upgrade": True,
"plugins.always_open_pdf_externally": True #It will not show PDF directly in chrome
})
self.driver = webdriver.Chrome(options=options

【讨论】:

  • 感谢您的回答,帮了大忙!
  • 谢谢!很好的答案!
  • 这对我不起作用,直到我将默认目录更改为使用反斜杠,所以我使用 "C:\\Users\\XXXX\" 而不是 "C:/Users/XXXX/Desktop" \桌面”。
【解决方案2】:

您可以使用 selenium 从网络下载 pdf (Embeded pdf & Normal pdf)。

from selenium import webdriver

download_dir = "C:\\Users\\omprakashpk\\Documents" # for linux/*nix, download_dir="/usr/Public"
options = webdriver.ChromeOptions()

profile = {"plugins.plugins_list": [{"enabled": False, "name": "Chrome PDF Viewer"}], # Disable Chrome's PDF Viewer
               "download.default_directory": download_dir , "download.extensions_to_open": "applications/pdf"}
options.add_experimental_option("prefs", profile)
driver = webdriver.Chrome('C:\\chromedriver\\chromedriver_2_32.exe', chrome_options=options)  # Optional argument, if not specified will search path.

driver.get(`pdf_url`)

它将下载pdf并保存在指定的目录中。根据您的方便更改download_dir 位置和chrome driver location

您可以从here下载chrome驱动。

希望对你有帮助!

【讨论】:

  • 这适用于 gui,如果我添加 options.add_argument('headless') 它不起作用。知道为什么吗?
  • 试试add_argument("--headless")。它适用于python3。我敢肯定,它也适用于 python 2。
  • 我也在用python3。它可能适用于其他 pdf 链接,但对于 AWS S3 链接,它不起作用。例如:http://spark-public.s3.amazonaws.com/nlp/slides/AdvancedMaxent.pdf 。甚至 wget 也不适用于 aws 链接。我不确定 aws 如何检查您是否处于 gui 模式。
  • 似乎在无头模式下“不允许”文件下载是一项安全功能bugs.chromium.org/p/chromium/issues/detail?id=696481#c39
  • @Om Prakash,你用 headless chrome 模式测试过你的代码吗?因为我在 headless chrome 中测试了你的 github 页面上的代码,但它没有工作。
【解决方案3】:

我做到了,它成功了,别问我是怎么做的:)

options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {
#"download.default_directory": "C:/Users/517/Download", #Change default directory for downloads
#"download.prompt_for_download": False, #To auto download the file
#"download.directory_upgrade": True,
"plugins.always_open_pdf_externally": True #It will not show PDF directly in chrome 
})
driver = webdriver.Chrome(options=options)

【讨论】:

    【解决方案4】:

    我在 Stackoverflow 本身的某个地方找到了这段代码,它为我服务,而根本不需要使用 selenium。

    import urllib.request
    
    response = urllib.request.urlopen(URL)    
    file = open("FILENAME.pdf", 'wb')
    file.write(response.read())
    file.close()
    

    【讨论】:

      【解决方案5】:

      在我的情况下,它无需任何代码修改即可工作,只需要禁用 Chrome pdf 查看器

      以下是禁用它的步骤

      1. 进入 Chrome 设置
      2. 滚动到底部点击高级
      3. 在隐私和安全下 - 点击“站点设置”
      4. 滚动到 PDF 文档
      5. 启用“下载 PDF 文件而不是在 Chrome 中自动打开它们”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 2018-11-13
        • 2018-03-08
        • 1970-01-01
        • 2018-04-14
        相关资源
        最近更新 更多