Selenium 在 Firefox 中下载 PDF 的问题

2024-04-05

我正在结合 Firefox 61.0 和 Geckodriver 0.21.0 将我们的内部 Java Selenium 框架升级到最新版本 3.14.0。

当我使用 Firefox 自动下载 PDF 文件时遇到问题。例如在这个link https://www.academic-conferences.org/pdf/download-info/eccws-2016-abstract-booklet/有一个下载按钮,我可以让 selenium 执行点击。将打开内置查看器,而不是下载 pdf。偏好pdfjs.disabled应该停用查看器,以便使用配置文件创建驱动程序实例(并且还尝试了更多首选项)。

FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setAcceptUntrustedCertificates(true);
firefoxProfile.setAssumeUntrustedCertificateIssuer(true);
firefoxProfile.setPreference("browser.download.folderList", 2);
firefoxProfile.setPreference("network.cookie.cookieBehavior", 0);
firefoxProfile.setPreference("network.cookie.alwaysAcceptSessionCookies", true);
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
firefoxProfile.setPreference("browser.helperApps.neverAsk.openFile", "application/pdf");
firefoxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);
firefoxProfile.setPreference("browser.download.manager.showAlertOnComplete", false);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
firefoxProfile.setPreference("browser.download.panel.shown", false);
firefoxProfile.setPreference("browser.download.manager.focusWhenStarting", false);
firefoxProfile.setPreference("browser.download.manager.closeWhenDone", false);
firefoxProfile.setPreference("browser.download.manager.useWindow", false);
firefoxProfile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
firefoxProfile.setPreference("browser.download.manager.alertOnEXEOpen", false);
firefoxProfile.setPreference("pdfjs.disabled", true);

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProfile(firefoxProfile);
WebDriver webdriver = new FirefoxDriver(firefoxOptions);

不幸的是,对于使用的 Firefox 版本,此配置没有效果。除非你改变pdfjs.disabled to true在运行时内about:config页。仅当在运行时首次更改时,pdf 查看器才真正被禁用。似乎是 Firefox 中的一个错误。好吧,无论如何,我找到了一种在运行时使用 selenium 更改此设置的方法。

但现在 pdf 查看器又被跳过了popup https://i.stack.imgur.com/dmY3b.png正在中断下载。 Selenium 甚至不知道这个弹出窗口。

在首选项页面上about:preferences under 应用领域 https://i.stack.imgur.com/QxZj7.png我现在可以看到内容类型PDF documentAction 改为无,这似乎与Always ask。之前是Preview in Firefox但它必须是Save File为了达到我的目标,即毫无疑问地立即下载 PDF。

不使用单个配置,您可以将其更改为“保存文件”。我错了吗?但是当我检查配置文件文件夹是否存在差异时,我发现有一个handlers.json其中包含上图中的设置。它在浏览器启动期间被读入,并在浏览器关闭时首先适应。
通常,selenium 会为每个新的浏览器实例创建一个新的临时配置文件文件夹。如果我想影响所需的设置,我需要定义一个自定义配置文件。这就是我的想法。所以我尝试了这个:

firefoxOptions.addArguments("-profile", "/tmp/my.profile");

我认为这是正确的,但现在又出现了另一个问题...因为尽管 Firefox 在给定目录中创建了必要的文件,但 selenium 和 firefox 之间的通信失败。浏览器窗口已打开且运行正常,但 Selenium 无法启动会话。

org.openqa.selenium.WebDriverException: connection refused 

            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57)
            at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104)
            at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:122)
            at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
            at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
            at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
            at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
            at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
            at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
            at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
            at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
            at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
            at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:125)
            at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
            at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
            at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
            at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
            at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:212)
            at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:130)
            at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:140)
            …

所以一般问题是:
单击按钮时如何强制 Firefox(由 selenium 控制)将 PDF 文件下载到我的文件系统?
任何可能性都是合理的。

由于我已经没有想法了,如果有人可以提供帮助或至少确认这些问题是 Firefox 的问题,那就太好了。


  1. 关闭火狐浏览器
  2. 运行 firefox 配置文件管理器(Win+R: firefox -p)
  3. 创建一个新的 Firefox 配置文件,名为 selenium_profile
  4. 在 Selenium 配置文件中运行 Firefox
  5. 手动下载所需的 PDF 文件并设置为始终下载此类文件类型

要使用 selenium_profile 运行 webdriver,请使用以下命令:

public static void setUpClass() {
    FirefoxOptions options = new FirefoxOptions();
    ProfilesIni allProfiles = new ProfilesIni();         
    FirefoxProfile selenium_profile = allProfiles.getProfile("selenium_profile");
    options.setProfile(selenium_profile);
    options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
    System.setProperty("webdriver.gecko.driver", "C:\\Users\\pburgr\\Desktop\\geckodriver-v0.20.0-win64\\geckodriver.exe");
    driver = new FirefoxDriver(options);
    driver.manage().window().maximize();}

只需编辑路径即可。

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

Selenium 在 Firefox 中下载 PDF 的问题 的相关文章

  • 如何在Python中使用selenium“向下滚动”某些部分?

    希望你很好 我正在尝试制作一个简单的脚本 但我卡在那里 我试图滚动列表以获取更多内容 但我无法向下滚动 任何人都知道这是如何完成的 这是我的代码 import selenium from selenium import webdriver
  • Response.Redirect 并不总是重定向

    我们在一个工作不一致的页面上有一个简单的 Response Redirect IIS 6 0 大多数情况下 它会正确重定向 但我们收到一些用户抱怨 他们没有重定向 而是看到 302 对象移至此处 页面 该页面显示标题信息以及正确的位置 如果
  • 用户模式 ​​.NET 设置存储在哪里?

    我想知道 NET 中 settings 文件背后的魔力是什么 假设您创建了一个在此示例中称为的程序集SettingsHolder 您创建一个公共的设置类 其中在用户模式下有一个字符串 然后进行编译 现在 您在 MyApp 中引用您的程序集
  • 在 iPhone 上搜索 PDF

    经过两天尝试使用 Quartz 从 PDF 中读取注释后 我成功做到了并且发布我的代码 https stackoverflow com questions 4080373 get pdf hyperlinks on ios with qua
  • SVG 过滤器在 Firefox 中不显示,在 Chrome 中工作正常

    我想要深色背景上的一段深色文本外面有白色的光芒 虽然默认阴影滤镜 https developer mozilla org en US docs Web CSS filter drop shadow 2在 CSS 中 比如filter dro
  • 如何在Python Selenium中获取WebElement的类名?

    我使用 Selenium WebDriver 来抓取从网页中获取的 用 JavaScript 编写的表格 我正在迭代表行列表 每行可能属于不同的类别 我想获取此类的名称 以便我可以为每一行选择适当的操作 table body table f
  • 使用 GhostScript 获取页面大小

    是否可以使用 GhostScript 获取页面大小 例如从 PDF 文档页面 我见过 bbox 设备 但它返回的是边界框 每页不同 而不是 PDF 页面的 TrimBox 或 CropBox 看http www prePressure co
  • Firefox -moz-border-radius 不会裁剪图像?

    如果设置了图像的边框半径 有谁知道如何让 Firefox 裁剪角 它包含的元素可以正常工作 但我会发现丑陋的角落伸出来 有什么方法可以解决此问题 而无需将图像设置为背景图像或在将其放在网站上之前对其进行处理吗 解决方法 将图像设置为容器元素
  • 如何从纯文本文件中解析文本并使用结果突出显示 PDF 文件

    早在 2010 年 就有人声称能够做到这一点 http www mobileread com forums showthread php t 103847 http www mobileread com forums showthread
  • 检查按钮是否可用?如果没有,请等待 5 秒钟,然后再次检查?

    基本上我想看看此刻是否可以单击按钮 如果没有我想再试一次 所以我需要某种 goto 函数来返回到代码的前一行 尽管我怀疑我写得非常糟糕 但它本来可以做得更容易 try driver findElement By xpath button i
  • 裁剪 .pdf 文件的页面

    我想知道是否有人有以编程方式处理 pdf 文件的经验 我有一个 pdf 文件 我需要将每一页裁剪到一定大小 经过快速谷歌搜索后 我找到了 python 的 pyPdf 库 但我的实验失败了 当我更改页面对象上的cropBox 和trimBo
  • Seleneium 异常 - Arguments[0].click 不是 Selenium Python 中使用 execute_script() 的函数

    我正在这个网站上抓取交互式地图 https collegecrisis shinyapps io dashboard https collegecrisis shinyapps io dashboard 使用Python和Selenium
  • 我可以在不使用 python 打开浏览器的情况下将 selenium 与 Scrapy 一起使用吗

    我想用 scrapy 和 python 进行一些网络爬行 我从互联网上发现了一些代码示例 其中他们将 selenium 与 scrapy 一起使用 我不太了解selenium但只知道它会自动执行一些网络任务 浏览器实际上会打开并执行一些操作
  • Selenium 3 Firefox .click() 不起作用

    自从我升级到最新的 Selenium 版本后 我的 Firefox 驱动程序无法正常工作 未能通过搜索 Google Stack 找到答案 我希望这里有人能找到答案 我已经构建了一个页面对象模型 用于登录网页 单击管理站点并填写用户名 密码
  • xpath+ 正则表达式:匹配文本

    我正在尝试编写一个 xpath 以便仅返回包含文本和数字的节点 我想使用正则表达式并希望这能起作用 td matches text d 谁能帮我理解我在这里做错了什么 tr td 1 td td 10 td td a td tr 你缺少量化
  • Selenium - 模式对话框存在 - 如何接受信息?

    我有以下问题 在页面上提交一些日期后 我有一个如图所示的模式对话框 我想单击 ENTER 来浏览该模式 但它不起作用 我有以下代码 driver FindElement By CssSelector input submit Click A
  • 如何清除chrome性能条目或绕过其数量限制?

    我使用 Google Chrome 来分析一些使用 Javascript 动态加载脚本和其他资源的网页的性能 我用performance getEntries 方法 但我注意到 Chrome 只记录前 150 个资源 我找不到任何方法来获取
  • 使用 selenium 进行身份验证 (Python)

    我有指向我网站管理区域的链接 是否可以使用 selenium 在给定的浏览器中 启动这些 URI 链接 而无需事先进行身份验证 如果没有 那么我如何使用 selenium 处理身份验证 不确定您的意思 但您可以仅使用选择器并在身份验证字段中
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper

随机推荐

  • 二叉树的列表实现是否可扩展?

    我正在写一个简单的编解码器 该树将被预先计算 一旦构建就不会发生任何变化 它只会被搜索 平衡二叉树的所有叶节点都是信号值 内部节点是近似压缩表示 如果我有很大的叶节点值 使用 stl 矢量的列表实现是否可扩展 目前我不知道有多大 列出实现
  • Typescript 为具有动态和静态键的对象创建接口

    我正在尝试学习打字稿 但在界面方面遇到了障碍 我有一个想要保存的对象token和一个route如下 const obj token thisismytoken path to somewhere 我在这里遇到的问题是 如何生成该对象的接口
  • 使用 Retrofit 网络请求时如何使用 IdlingResource 测试 Android UI

    我正在编写集成测试 在 UI 中执行操作 使用以下命令启动网络调用Retrofit 我知道我需要实施CountingIdlingResource https code google com p android test kit source
  • 通过从 pandas 数据框中的所有行中获取非 NaN 来合并相同索引的行

    我有一个带有重复索引的稀疏数据框 如何以我保留的方式合并相同索引的行所有非 NaN 数据来自冲突的行 我知道您可以使用内置功能实现非常接近的目标drop duplicates功能 但你只能保留first or the last具有相同索引的
  • 如何将ajax html响应附加到当前div的旁边

    I ve DOM如下 div ul li span a Mike a span li li span a John a span li li span a Ket a span li ul div and jQuery如下 document
  • 以编程方式创建物理约束区域,SpriteKit

    我想要两个区域 如下图所示 其中黄色区域包含精灵 例如 我想让黄色区域中的球在黄色区域的边界上弹跳和反射 如何在不使用 sks 文件的情况下以编程方式执行此操作 您可以使用以下命令创建基于边缘的物理体 bodyWithEdgeLoopF r
  • 为我的进程禁用 Windows 错误报告 (Dr. Watson)

    我有一个应用程序托管一些不稳定的第三方代码 我无法在外部进程中控制这些代码 以保护我的主应用程序免受其出现的严重错误的影响 我的父进程正在监视其他进程 并在失败时执行 正确的事情 tm 我遇到的问题是 Dr Watson 仍在检测隔离进程中
  • NativeScript:格式化数字打字稿

    我对 NativeScript 完全陌生 在谷歌上搜索一些基本的东西比应有的更难 我想做的基本上是这样的 我有号码 1234567 89 在变量中 我想将其显示在具有以下格式的标签中 1 234 567 89 另外 如果 89 为 0 则始
  • 获取 Eclipse 编辑器的当前源代码?

    我正在使用 Eclipse IDE 我想首先开发一个插件 这个插件允许我以简单的字符串形式获取整个源代码 我使用模板 hello world command 制作了一个简单的 hello the world 插件 现在我正在寻找从 Ecli
  • 为什么 UIMenuItem 操作的发送者总是 nil?

    我添加了一个UIMenuItem实例到UIMenuController 当我在文本字段中点击两次时 我会看到带有复制 剪切 粘贴 维基百科查找的文本编辑菜单 这是我的操作方法 void lookupInWikipedia id sender
  • 为什么 TFS 2017 Sonar Build Definition 给出“未指定有效规则”错误?

    我有一个为 HTML TypeScript Javascript 创建的 TFS 2017 构建定义 它执行声纳任务 在执行声纳构建定义后 我得到错误 未指定有效规则我的构建摘要中显示的消息 此错误是在构建定义中的运行代码分析任务期间创建的
  • 使用 Java 中的 Office 365 REST API 构建守护程序或服务应用程序

    我正在尝试构建批处理作业来访问 Office 365 Mail API 正在检查文档 https azure microsoft com en us documentation articles active directory authe
  • Spring Boot - @PreAuthorize 在测试中不起作用

    我有这样的控制器 RestController RequestMapping value test PreAuthorize hasRole ADMIN public class TestController RequestMapping
  • 是否可以选择严格传播对象?

    我想知道是否有编译器选项或类似的东西可以使传播对象严格 请参阅以下示例以了解我的意思 interface Foo a string interface Bar a string b number const barObject Bar a
  • 如何在 SwiftUI 中删除列表分隔线

    所以问题很简单 就在标题中 我想删除 SwiftUI iOS 14 中的行分隔符 以前 我使用的是 UITableView appearance separatorStyle none以前在 iOS 13 中可以完成这项工作 但是现在它不起
  • 递归忽略特定目录中除 .json 文件之外的所有文件

    我有一个类似于下面的文件结构 foo bar foo node modules foo bar json node modules foo bar foo bar 我想要做的是忽略里面的所有文件node modules文件夹除了json文件
  • 如何将不同记录的数据添加到一条记录中?

    如果没有时间请看一下示例 我有两种类型的用户 临时用户和永久用户 临时用户以访客身份使用系统 只需提供他们的姓名并使用它 但系统需要跟踪他们 永久用户是指已注册且永久的用户 一旦用户为自己创建永久记录 我需要将用户作为访客时跟踪的所有信息复
  • Node.js 和 WebSockets (Socket.io) 单元测试

    有人可以使用 WebSockets Socket io 为 Node js 提供坚如磐石 极其简单的单元测试吗 我在 Node js 中使用 socket io 并在测试中查看了 socket io client 来建立与服务器的客户端连接
  • 从 PendingIntent(通知按钮)启动 JobIntentService?

    在我的应用程序中 我有一个通知按钮 它使用 IntentService 在后台触发一个简短的网络请求 在这里显示 GUI 没有意义 这就是我使用服务而不是 Activity 的原因 请参阅下面的代码 Build the Intent use
  • Selenium 在 Firefox 中下载 PDF 的问题

    我正在结合 Firefox 61 0 和 Geckodriver 0 21 0 将我们的内部 Java Selenium 框架升级到最新版本 3 14 0 当我使用 Firefox 自动下载 PDF 文件时遇到问题 例如在这个link ht