我想获取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() |
这时,通过设置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) |
在下载目录中获取最新的下载文件名。
在"最新日期的文件"条件下,使用
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文件名。
这就是
的全部。