我正在将内部Java Selenium框架与Firefox 61.0和Geckodriver 0.21.0结合在一起升级到最新版本3.14.0。
在使用Firefox自动下载PDF文件时,我遇到了问题。例如,在此link处有一个下载按钮,我可以在其中单击硒。无需下载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
页面中将true
更改为about:config
。只有在运行时第一次更改pdf查看器时,它才真正被禁用。似乎是Firefox中的错误。好的,无论如何,我找到了一种在运行时使用硒进行更改的方法。
但是现在pdf查看器被跳过了,另外popup中断了下载。硒甚至不知道此弹出窗口。
在Applications下的首选项页面about:preferences
上,我现在可以看到,对于内容类型PDF document
,操作已更改为空,似乎与{{1}相同}。之前Always ask
是Preview in Firefox
,但为了达到我的目标,它必须立即下载PDF而没有任何问题。
如果没有单个配置,则可以将其更改为“保存文件”。我错了吗?但是,当我检查配置文件文件夹中的差异时,我发现有一个Save File
包含上图的设置。在浏览器启动期间将其读入,并在浏览器关闭时首先进行调整。
通常selenium为每个新的浏览器实例创建一个新的临时配置文件文件夹。如果要影响所需的设置,则需要定义一个自定义配置文件。那是我的想法。所以我尝试了这个:
handlers.json
我认为这是正确的,但是现在又出现了一个问题……因为尽管Firefox在给定目录中创建了必要的文件,但是硒与Firefox之间的通信失败。浏览器窗口打开并且运行正常,但是Selenium无法启动会话。
firefoxOptions.addArguments("-profile", "/tmp/my.profile");
所以通常的问题是:
单击按钮时,如何强制Firefox(受硒控制)将PDF文件下载到我的文件系统中?可能性是合理的。
由于我的想法不多了,如果有人可以帮助或至少确认这些是Firefox的问题,那将是很好的。
答案 0 :(得分:0)
要使用selenium_profile运行webdriver,请使用以下命令:
-bash-3.2$ c++filt _ZN3MDS15BloombergSource12startSessionEv
MDS::BloombergSource::startSession()
只需编辑路径。
答案 1 :(得分:0)
将pdfjs.enabledCache.state
添加为false。
FirefoxOptions options = new FirefoxOptions();
options.addPreference("browser.download.folderList", 2);
options.addPreference("browser.download.dir", pathToDownload);
options.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
options.addPreference("pdfjs.enabledCache.state",false);
WebDriver driver = new FirefoxDriver(options);