当前位置: 首页 > 知识库问答 >
问题:

在无头模式下通过Google Chrome下载文件

孟浩慨
2023-03-14

我做我的代码在CromeDrive在'正常'模式和工作正常。当我切换到无头模式时,它不会下载文件。我已经尝试了我在互联网上找到的代码,但是不起作用。

chrome_options = Options()
chrome_options.add_argument("--headless")
self.driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=r'{}/chromedriver'.format(os.getcwd()))
self.driver.set_window_size(1024, 768)
self.driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')

params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': os.getcwd()}}
self.driver.execute("send_command", params)

有人知道如何解决这个问题吗?

PS:我不一定要用Chomedrive。如果它在另一个驱动器中工作,对我来说没问题。

共有3个答案

虞唯
2023-03-14

Chomedriver版本:95.0。4638.54
Chrome 95.0版。4638.69

    from selenium.webdriver.chrome.options import Options    
 
    options = Options()
    options.add_argument("--headless")
    options.add_argument("--start-maximized")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-extensions")
    options.add_argument('--disable-dev-shm-usage')    
    options.add_argument("--disable-gpu")
    options.add_argument('--disable-software-rasterizer')
    options.add_argument("user-agent=Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166")
    options.add_argument("--disable-notifications")

    options.add_experimental_option("prefs", {
        "download.default_directory": "C:\\link\\to\\folder",
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing_for_trusted_sources_enabled": False,
        "safebrowsing.enabled": False
        }
    )

似乎起作用的是,我用“\\”代替了“/”作为地址。后一种方法没有抛出任何错误,但也没有下载任何文档。但是,使用双反斜杠完成了这项工作。

沈永贞
2023-03-14

对于javascript使用下面的代码:

    const chrome = require('selenium-webdriver/chrome');
    let options = new chrome.Options();
    options.addArguments('--headless --window-size=1500,1200');
    options.setUserPreferences({ 'plugins.always_open_pdf_externally': true,
    "profile.default_content_settings.popups": 0,
    "download.default_directory": Download_File_Path });
    driver = await new webdriver.Builder().setChromeOptions(options).forBrowser('chrome').build();

单击下载按钮后立即切换选项卡:

    await driver.sleep(1000); 
    var Handle = await driver.getAllWindowHandles();
    await driver.switchTo().window(Handle[1]);
夹谷晋
2023-03-14
  • Selenium客户端版本:Selenium v3。141.59

要下载文件,请单击此网站中的元素,并将文本作为下载数据,您可以使用以下解决方案:

>

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")
options.add_argument("--window-size=1920,1080")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe', service_args=["--log-path=./Logs/DubiousDan.log"])
print ("Headless Chrome Initialized")
params = {'behavior': 'allow', 'downloadPath': r'C:\Users\Debanjan.B\Downloads'}
driver.execute_cdp_cmd('Page.setDownloadBehavior', params)
driver.get("https://www.mockaroo.com/")
driver.execute_script("scroll(0, 250)"); 
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#download"))).click()
print ("Download button clicked")
#driver.quit()

控制台输出:

Headless Chrome Initialized
Download button clicked

文件下载快照:

自引入HeadlessChrome以来,通过HeadlessChromium下载文件是最受欢迎的功能之一。

从那以后,不同的贡献者发表了不同的工作方法,其中一些是:

  • 使用chrome headless和selenium下载

现在,好消息是Chromium团队已经通过Headless Chromium正式宣布了下载文件的功能。

在讨论中,Headless模式不保存文件下载@eseckler提到:

无头下载的工作方式有点不同。这是页面。setDownloadBehaviordevtools命令设置下载文件夹。我们正在研究一种使用DevTools网络拦截的方法,通过DevTools传输下载的文件。

详细讨论见696481期:Headless模式不保存文件下载

最后,@bugdroid修订版似乎为我们解决了这个问题。

以前,在headless模式下运行的Chromedriver不会正确下载文件,因为它稀疏地解析给定给它的首选项文件。来自headless chrome团队的工程师建议使用DevTools的“Page.setDownloadBehavior”来修复此问题。此变更列表实现此修复。下载的文件默认为当前目录,可以在实例化chromedriver实例时使用download_dir进行设置。还添加了测试以确保正确的下载功能。

这是修改和提交

来自ChromeDriver v77。0.3865.40(2019-08-20)发行说明:

Resolved issue 2454: Headless mode doesn't save file downloads [Pri-2]

>

  • Chrome金丝雀
  • 来自Dev Channel的最新版本

然而,MacOSX用户在Chromedriver上等待他们的馅饼,无头chrome在发送页面后崩溃。在MacOSX上设置下载行为。

 类似资料:
  • 我用的是chrome第77版,测试一些下载。但我不明白为什么它不让在无头模式下下载文件(只发生在无头模式下)。这是我正在使用的代码。 _chromeOptions。AddUserProfilePreference(" download . default _ Directory " ,@ "目录文件夹");_chromeOptions。adduser profile preference(" in

  • 问题内容: 我在服务器端有一个Struts2操作,用于文件下载。 但是,当我使用jQuery调用操作时: 在Firebug中,我看到数据是通过 Binary流 检索的。我想知道如何打开 文件下载窗口 ,用户可以用它在本地保存文件吗? 问题答案: 这是我现在建议的一些注意事项: 需要相对较新的浏览器 如果预期文件 很大,则 您可能应该执行与原始方法(iframe和cookie)类似的操作,因为以下某

  • 我试图使简单的文件服务器。我有Node.js后端与MongoDB GridFS存储存储文件。我从服务器获取文件通过。在前端,我使用Angular。我有两个主要问题: 当我使用Blob提供下载服务时,变成:“d1c393df-b0d9-4ae5-befe-8d45b183eb54…”友善的我读了很多关于它的文档,没有找到任何解决方案 当我只通过Express提供下载服务而不进行身份验证时,文件会正确

  • 我正在使用以下版本: Ruby 2.4.1 铬驱动2.33 selenium-webDrive3.7.0 watir 6.7.3 page对象2.2.2 Chrome浏览器 环境署。rb文件包含下载目录的路径。当不是在headless模式下运行测试时,文件可以完美下载,但是当我运行它时,没有任何事情发生,文件也不会下载。我使用的是ChromeDeriver 2.27和Chrome浏览器58。*它在

  • 下面是Java样例代码 import java.io.IOException; import com.xiaomi.infra.galaxy.fds.client.FDSClientConfiguration; import com.xiaomi.infra.galaxy.fds.client.GalaxyFDS; import com.xiaomi.infra.galaxy.fds.clien

  • 有人成功地从linux终端下载了wetransfer链接吗? thnx mart