python-3.x 为什么我所有的下载都保存为CRDOWNLOAD在共享文件夹中当尝试通过selenium edge-webdriver下载?

rsl1atfo  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(286)

我正在尝试使用Python中的Selenium WebDriver下载共享文件夹中的文件。我使用以下代码:

from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium import webdriver

pathtodownload = "\\\\shared folder"
driverpath = "edge driver path"

options = Options()
prefs = {"download.default_directory": pathtodownload}
options.add_experimental_option("prefs", prefs);

service = Service(driverpath)
driver = webdriver.Edge(service=service, options=options)

但是,该文件仅部分作为CRDOWNLOAD文件下载。尝试手动下载时,文件将完全下载到默认下载文件夹,甚至在我将其更改为共享文件夹后也会下载。是什么导致了这个问题?

1bqhqjot

1bqhqjot1#

您面临的问题可能与Selenium WebDriver处理文件下载的方式有关。默认情况下,WebDriver会等待下载整个文件后再继续,这可能不适合大文件或慢速网络连接。
要解决此问题,您可以尝试以下解决方案:
为Edge浏览器配置文件设置下载目录:您可以使用所需的下载目录创建自定义浏览器配置文件,而不是使用实验性选项。这可以使用edge_profile选项来实现。下面是一个例子:

from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium import webdriver

pathtodownload = "\\\\shared folder"
driverpath = "edge driver path"

options = Options()
options.add_argument("--user-data-dir=C:\\path\\to\\profile")
options.add_argument("--no-sandbox")

# Set the desired download directory
options.add_argument(f"--download.default_directory={pathtodownload}")

service = Service(driverpath)
driver = webdriver.Edge(service=service, options=options)

确保将“C:\path\to\profile”替换为Edge配置文件的实际路径。
处理不完整的下载:如果上述解决方案不起作用,您可以尝试等待CRDOWNLOAD文件完成下载。您可以使用循环来检查文件大小是否在一定时间内保持不变。文件完全下载后,您可以继续执行脚本。下面是一个例子:

import os
import time

# Your existing code here...

# Wait for the download to complete
downloaded_file = os.path.join(pathtodownload, "filename.ext")
timeout = 60  # Maximum time to wait for download completion (in seconds)
interval = 5  # Time interval to check for file size (in seconds)

start_time = time.time()
while time.time() - start_time < timeout:
   if os.path.exists(downloaded_file):
    if os.path.getsize(downloaded_file) > 0:
        break
time.sleep(interval)

在上面的代码中,将“filename.ext”替换为您正在下载的文件的实际名称。
通过使用第二种方法,您可以手动处理未完成的下载,方法是等待文件完全下载,然后再继续执行脚本。

相关问题