python-3.x 尝试下载 selenium chrome 合金文件时出现保存文件对话框

np8igboo  于 2023-03-04  发布在  Python
关注(0)|答案(1)|浏览(133)

我正在docker中使用selenium grid,我的节点是从selenium/node-chrome:4.8.0图像创建的,我的中心是从selenium/hub:4.8.0图像创建的,当我尝试用下面的代码下载一个文件时,google chrome显示一个对话框,询问下载路径。

from selenium import webdriver
from selenium.common.exceptions import InvalidSessionIdException
from selenium.webdriver.common.by import By
from time import sleep

options = webdriver.ChromeOptions()
url = "http://localhost:4444/wd/hub"
options.add_argument("--window-size=1920,1080")
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("--disable-notifications")
prefs = {"profile.managed_default_content_settings.images": 2,
         "download.default_directory": "/home/seluser/download",
         "download.prompt_for_download": False,
         "download.directory_upgrade": True,
         "plugins.always_open_pdf_externally": True,
        }
options.add_experimental_option("prefs", prefs)
driver = webdriver.Remote(command_executor=url,
                          options=options)
driver.maximize_window()
driver.get("https://dornsife.usc.edu/assets/sites/298/docs/ir211wk12sample.xls")
sleep(5)

我的代码在从selenium/standalone-chrome:3.141.59映像创建的独立selenium容器中工作。

sigwle7e

sigwle7e1#

最后,经过几个小时的搜索,以找到一个答案没有任何结果,我尝试了另一种方法。
为什么我使用 selenium 下载文件?因为我需要先登录,然后再尝试下载文件。
在此方法中,登录后,我在requests会话中加载Selenium Cookie,然后使用requests下载文件。

def download_file(driver, url: str, dest_path: str):
    s = requests.Session()
    for cookie in driver.get_cookies():
        s.cookies.set(cookie['name'], cookie['value'])
    r = s.get(url, stream=True)
    with open(dest_path, "wb") as f:
        for chunk in r.iter_content(chunk_size=1024):
            f.write(chunk)

相关问题