ChromeDriver 版本 117+ 强制“另存为”对话框 - 如何绕过? (硒/Java)

2024-03-04

我一直致力于在 Java 中使用 Selenium WebDriver 和 ChromeDriver 来自动下载文件。我的代码工作正常,直到我更新到 ChromeDriver 版本 117+,代码工作正常,直到 Chrome 116.0.5845.141,问题似乎从 Chrome 116.0.5845.188 开始。现在,浏览器似乎强制显示“另存为”对话框,即使我已经设置了 Chrome 首选项来避免它。

这是我的 Java 代码片段:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.util.HashMap;

public class FileDownloadHeadless {
    public static void main(String[] args) throws InterruptedException {

        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver.exe");

        ChromeOptions options = new ChromeOptions();
        options.setCapability("os", "Windows");
        options.setCapability("os_version", "10");
        options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        options.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION, true);
        options.setCapability("chrome.switches", Arrays.asList("--incognito"));
        options.setCapability(ChromeOptions.CAPABILITY, options);
        options.addArguments("--headless");
        options.addArguments("--disable-gpu");

        HashMap<String, Object> chromePrefs = new HashMap<>();
        chromePrefs.put("profile.default_content_settings.popups", 0);
        chromePrefs.put("download.default_directory", "C:\\local_files");
        chromePrefs.put("download.prompt_for_download", false);
        chromePrefs.put("profile.content_settings.exceptions.automatic_downloads.*.setting", 1);
        chromePrefs.put("profile.default_content_setting_values.automatic_downloads", 1);
        options.setExperimentalOption("prefs", chromePrefs);

        WebDriver driver = new ChromeDriver(options);

        driver.get("http://my_site.com/download");

        driver.findElement(By.id("id_button_download")).click();

        Thread.sleep(5000);

        driver.quit();
    }
}

尽管进行了这些设置,“另存为”对话框仍然出现,并且它扰乱了自动化流程。我尝试了 Chrome 首选项的各种组合,但似乎没有一个可以绕过版本 117 中引入的新行为。

有其他人在 ChromeDriver 版本 117+ 或更高版本中遇到过此问题吗?如果是这样,您是如何解决此更新的?任何见解将不胜感激。

按照@NhanTT的建议删除“--incognito”模式,确实有效!但我想知道该模式为何以及如何实际影响文件下载选项。如果有人有另一种解决方案可以解决该问题,同时保持隐身模式,我将不胜感激。

感谢您的时间和帮助。


我只是删除 --incognito 它工作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ChromeDriver 版本 117+ 强制“另存为”对话框 - 如何绕过? (硒/Java) 的相关文章

随机推荐

  • 使用查询字符串参数消除 UriTemplate 匹配的歧义

    我正在使用 WCF 4 0 创建 REST ful Web 服务 我想做的是根据查询字符串参数调用不同的服务方法UriTemplate 例如 我有一个 API 允许用户使用驾驶执照或社会安全号码作为密钥来检索有关人员的信息 在我的Servi
  • 如何从用户计算机加载图像

    是否可以从用户计算机将图像加载到 XNA 游戏 例如 我想将 C Images Box png 加载到精灵纹理 是否可以 如果是 怎么办 在XNA 4 0中使用Texture2D FromStream http msdn microsoft
  • 使用 IIS 调试 ASP.NET

    我已经在 Visual Studio 2008 中将调试设置为 IIS 而不是内置服务器 这样我就可以在开发时运行 url 重写 使用 IIRF 花了一段时间才开始工作 更改权限 重新安装 NET 框架 但它正在工作 我关闭了机器 现在它重
  • 将 ClassPathScanningCandidateComponentProvider 与多个 jar 文件一起使用?

    我正在考虑使用 ClassPathScanningCandidateComponentProvider 在 JVM 中查找特定类的子类 我正在做的事情几乎完全按照这里描述的进行 在运行时扫描Java注释 https stackoverflo
  • Android 中双 SIM 卡设备的手机号码验证

    我已经在我的应用程序中完成了 SIM 手机号码验证 与 Whats APP 相同 部分 就像是 发送消息部分 SmsManager sm SmsManager getDefault sm sendTextMessage mobileNumb
  • 在sql server表中存储标签的最佳方式?

    存储记录标签的最佳方式是什么 只使用 varchar 字段 当选择包含标签 x 的行时怎么样 使用like运算符 thanks 取决于两件事 1 标签 标记记录的数量2 无论你是否对正常化有宗教观点 除非处理大量数据 否则我建议使用一个 标
  • 如何替换 ajax 加载的 html 文档上的元标题、关键字和描述?

    如何用 ajax 调用中传入的 html 文档中的元标题和描述替换文档上的元标题和描述 我正在从相邻 html 文档上的 content div 调用新内容 我想要发生的是 当新内容加载时 我想用正在加载的 html 文件中的元标题替换主文
  • 优化 ORDER BY 查询

    我不知所措 我有一个大约有 100K 行的表 查询该表时 结果通常很快 大约 2 毫秒左右 但每当我使用 ORDER BY 时 性能就会急剧下降到 120 毫秒左右 我读了MySQL ORDER BY 优化 http dev mysql c
  • .Dispose a StreamWriter 是否会关闭底层流?

    StreamWriter Close 表示它还会关闭 StreamWriter 的底层流 StreamWriter Dispose 怎么样 Dispose 是否也会处理和 或关闭底层流 StreamWriter Close 只是打电话Str
  • 基于数据帧名称中的通用模式 rbind 数据帧

    假设我有多个数据帧 它们都具有相同的向量名称 并且我想绑定所有具有共同模式的数据帧 所以对于这 3 个数据框 df 1 lt data frame column1 factor sample c Male Female 10 replace
  • 从 JavaScript Ajax 调用者调用 PHP 函数

    我需要对 php 类中的 php 函数进行 ajax 调用 文件夹是这样的 controllers folder User php php file View folder js folder myjavascriptfile js 里面m
  • 如何在tvOS上显示GameCenter排行榜?

    I think我按照所有必需的步骤在我的游戏中支持排行榜 它们在 iOS 上运行得很好 但是在 tvOS 上无法配置GKGameCenterViewController要显示特定的排行榜 LeaderboardIdentifier属性只是丢
  • 使用 React Native 和 API 后端进行身份验证

    我正在尝试使用 React Native 应用程序和单独的 NodeJS Express API 后端来理解 oauth 我明白https github com adamjmcgrath react native simple auth h
  • 什么是 -[NSURL _fastCharacterContents]:?

    所以我在一个方法中调用它 id initWithContentURL NSString url if self super init NSLog xSheetMusicViewController url Casting an NSStri
  • 如何在 KonvaJs 中获得三个碰撞形状的交集并删除不碰撞的部分?

    如果给我 3 个圆圈 它们被定位为原色圆圈 https i stack imgur com l2ie2 png 3个圆圈彼此相交 是否有一个功能可以帮助我删除不与任何东西碰撞的部分并只保留相交的部分 另一个例子可以绘制三条线 使其形成一个三
  • andengine 中的 TimerHandler 按一定时间间隔生成精灵

    我在 andEngine 中使用这个 TimerHandler 在特定时间生成精灵 mScene registerUpdateHandler new TimerHandler 0 02f true new ITimerCallback Ov
  • 跟踪文件导入数据库

    我需要使用以下 Java 代码测试文件导入状态 EventListener public void handleContextStart ContextRefreshedEvent eventd throws IOException Int
  • node.js 表达 mongodb 保存消息?

    我试图看到express mongoose 和MongoDB 以一种非常简单的方式协同工作 如果我可以有一个盒子 将我的名字放入其中 提交并将其保存到数据库 这就是我所需要的 我尝试通过一些教程来做到这一点 但我被困住了 我试图通过聊天来完
  • 同步两个DataGridView的水平滚动事件

    我需要同步两个的滚动事件DataGridView控件 这样当我水平滚动第一个 DGV 时 第二个 DGV 也应该以相同的方式滚动 是否可以 这可以在设计时设置吗 这可以通过如下代码完成 您可能正在寻找一种 C 方法来实现这一点 但以下是我在
  • ChromeDriver 版本 117+ 强制“另存为”对话框 - 如何绕过? (硒/Java)

    我一直致力于在 Java 中使用 Selenium WebDriver 和 ChromeDriver 来自动下载文件 我的代码工作正常 直到我更新到 ChromeDriver 版本 117 代码工作正常 直到 Chrome 116 0 58