Python Selenium 使用 ChromeDriver 下载图像(jpeg、png)或 PDF

ani*_*rma 3 python selenium selenium-chromedriver selenium-webdriver

我有一个 Python 中的 Selenium 脚本(在 Windows 上使用 ChromeDriver),它从页面获取各种附件(不同文件类型)的下载链接,然后打开这些链接来下载附件。这对于 ChromeDriver 默认下载的文件类型无法预览,效果很好。但图像(JPEG、PNG)和 PDF 会默认预览,因此不会自动下载。

我当前使用的 ChromeDriver 选项(适用于不可预览的文件):

chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : 'custom_download_dir'}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome("./chromedriver.exe", chrome_options=chrome_options)
Run Code Online (Sandbox Code Playgroud)

这会将文件下载到“custom_download_dir”,没有问题。但可预览的文件只是在 ChromeDriver 实例中预览,而不是下载。

是否有任何 ChromeDriver 设置可以禁用此预览行为并直接下载所有文件(无论扩展名如何)?

如果没有,可以使用 Firefox 来完成吗?

Pit*_*tto 5

我不会依赖特定的浏览器/驱动程序选项,而是使用图像 url 来执行下载,从而实现更通用的解决方案。

您可以使用类似的代码获取图像 URL:

driver.find_element_by_id("your-image-id").get_attribute("src")
Run Code Online (Sandbox Code Playgroud)

然后我会使用 urllib 等下载图像。

这是 Python2 的一些伪代码:

import urllib

url = driver.find_element_by_id("your-image-id").get_attribute("src")
urllib.urlretrieve(url, "local-filename.jpg")
Run Code Online (Sandbox Code Playgroud)

Python3 也是如此:

import urllib.request

url = driver.find_element_by_id("your-image-id").get_attribute("src")
urllib.request.urlretrieve(url, "local-filename.jpg")
Run Code Online (Sandbox Code Playgroud)

在评论后进行编辑,这是有关如何在知道文件 URL 后下载文件的另一个示例:

import requests
from PIL import Image
from io import StringIO

image_name = 'image.jpg'
url = 'http://example.com/image.jpg'

r = requests.get(url)

i = Image.open(StringIO(r.content))
i.save(image_name)
Run Code Online (Sandbox Code Playgroud)

  • 问题是查看图像我需要身份验证。我尝试使用 Python Requests 库,它需要 Kerberos 身份验证,我尝试提供凭据并使用 Python Kerberos 库,但它不起作用。我可以在 Selenium WebDriver 上查看它,因此我正在寻找一种通过 WebDriver 实例本身下载的方法。 (3认同)
  • 没有问题@oldboy。Pitto,感谢您进行编辑 - 不要忘记引起人们的注意。人们只有订阅您的答案才会看到更改,因此在这种情况下可能会错过它。 (2认同)