(Python Selenium)获取自动下载的PDF文件的名称


我想获取Python Selenium

自动下载的PDF文件名

我想通过爬网下载PDF文件名。以下是自动化和下载PDF时要解决的问题。

  • 1.我要将下载目标文件夹指定为项目文件夹。

设置启动ChromeDriver时指定的下载文件夹,以防止每个开发环境的下载位置都不同。

  • 2.无法通过直接指定文件名来读取进程

由于我不知道文件名,因此我检查了下载后是否可以立即获取文件名。

以上两点已作为自动文件下载的问题给出。我想解决这些问题并获取下载的PDF文件名。

创建WebDriver实例

时指定下载目标

首先,在创建WebDriver实例时使用浏览器进行下载时设置下载目标。 (对于Chrome驱动程序,使用add_experimental_option()方法在selenium.webdriver.ChromeOptions实例中指定download.default_directory。)

WebDriverModule.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.chrome.webdriver import WebDriver
import os

downloadsFilePath = './downloads'
class WebDriverModule(object):
    def getChromeDriver(self)->WebDriver:
        return webdriver.Chrome(
            options=self.getCoromeOptions()
        )
    def getCoromeOptions(self)->ChromeOptions:
        options = ChromeOptions()
        prefs = {
            "plugins.always_open_pdf_externally": True,
            "profile.default_content_settings.popups": 1,
            "download.default_directory":
                    os.path.abspath(downloadsFilePath) + r"\", #IMPORTANT - ENDING SLASH V IMPORTANT
            "directory_upgrade": True
        }
        options.add_experimental_option("prefs", prefs)
        return options

webDriverModule = WebDriverModule()
driver = webDriverModule.getChromeDriver()

DownloadDemo1.png

这时,通过设置plugins.always_open_pdf_externally = True,可以控制访问PDF文件并直接下载文件时使用默认查看器的过程。

test.py

1
2
3
4
5
from WebDriverModule import WebDriverModule
webDriverModule = WebDriverModule()
driver = webDriverModule.getChromeDriver()
fileUrl = 'http://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h30/pdf/30daijin.pdf'
driver.get(fileUrl)

DownloadDemo2.png

在下载目录中获取最新的下载文件名。

在"最新日期的文件"条件下,使用

os和max(列表,键)从下载目标中的所有文件中获取一个文件。

WebDriverModule.py

1
2
3
4
5
6
7
8
9
downloadsFilePath = './downloads'
class WebDriverModule(object):
    def getLatestDownloadedFileName(self):
        if len(os.listdir(downloadsFilePath)) == 0:
            return None
        return max (
            [downloadsFilePath+ f for f in os.listdir(downloadsFilePath)],
            key=os.path.getctime
        )

test.py

1
print(webDriverModule.getLatestDownloadedFileName())

输出结果.txt

1
2
python .\test.py
./downloads/30daijin.pdf

您现在已经获得了PDF文件名。

摘要

  • 启动ChromeDriver时指定下载目标。
  • 获取下载目标的最新文件名。

现在您已经获得了下载的PDF文件名。

这就是

的全部。