Selenium Webdriver:如何使用 Python 下载 PDF 文件?

Posted

技术标签:

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

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

【问题讨论】:

看看this answer...也许对你有帮助。 【参考方案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】:

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

import urllib.request

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

【讨论】:

【参考方案5】:

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

以下是禁用它的步骤

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

【讨论】:

以上是关于Selenium Webdriver:如何使用 Python 下载 PDF 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Selenium中WebDriver API的使用

如何使用 Java 在 selenium webdriver 中打开新选项卡,或者如何使用 selenium webdriver 使用动作类在 selenium 中按 ctrl + T [重复]

虫师Selenium2+Python_4webdriver API

如何使用selenium webdriver来判断一个网页加载完毕

使用httpclient 调用selenium webdriver

Selenium & webdriver.io 如何使用 executeScript?