Chromium/Chrome headless - file download not working?

后端 未结 7 1185
遥遥无期
遥遥无期 2020-12-03 05:21

I downloaded the latest version of chromium, to test out the headless feature.

When I run (as root, because I\'m still testing things):

./chrome --no         


        
7条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-03 05:55

    Use ChromeDriverService and POST session/{sessionId}/chromium/send_command

    JSON for POST:

    {
        "cmd": "Page.setDownloadBehavior",
        "params": {
            "behavior": "allow",
            "downloadPath": "C:\\Download\\Path"
        }
    }
    

    C# Solution

    Add reference to System.Net.Http and use NuGet to install Newtonsoft.JSON.

    public static IWebDriver Driver { get; private set; }
    
    public void SetDriver()
    {
        var chromeOptions = new ChromeOptions();
        chromeOptions.AddArguments("--headless", "--window-size=1920,1080");
    
        var driverService = ChromeDriverService.CreateDefaultService();
        Driver = new ChromeDriver(driverService, chromeOptions);
    
        Task.Run(() => AllowHeadlessDownload(driverService));
    }
    
    static async Task AllowHeadlessDownload(ChromeDriverService driverService )
    {
        var jsonContent = new JObject(
            new JProperty("cmd", "Page.setDownloadBehavior"),
            new JProperty("params",
            new JObject(new JObject(
                new JProperty("behavior", "allow"),
                new JProperty("downloadPath", @"C:\Download\Path")))));
        var content = new StringContent(jsonContent.ToString(), Encoding.UTF8, "application/json");
        var sessionIdProperty = typeof(ChromeDriver).GetProperty("SessionId");
        var sessionId = sessionIdProperty.GetValue(Driver, null) as SessionId;
    
        using (var client = new HttpClient())
        {
            client.BaseAddress = driverService.ServiceUrl;
            var result = await client.PostAsync("session/" + sessionId.ToString() + "/chromium/send_command", content);
            var resultContent = await result.Content.ReadAsStringAsync();
        }
    }
    

提交回复
热议问题