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) 的相关文章

  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack

随机推荐

  • 使用查询字符串参数消除 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