如何在 Firefox 58++ 上使用 PHP Webdriver for Selenium 下载文件

Posted

技术标签:

【中文标题】如何在 Firefox 58++ 上使用 PHP Webdriver for Selenium 下载文件【英文标题】:How to download a file with the PHP Webdriver for Selenium on Firefox 58++ 【发布时间】:2018-05-17 21:07:50 【问题描述】:

我一直在尝试使用 Selenium 的 php Webdriver 下载最新版本的 Firefox 文件,但我无法使其正常工作。这是我的 phpunit bootstrap.php 文件中用于 Firefox 的 WebDriver 配置的代码:

$profile = new FirefoxProfile();
$caps = DesiredCapabilities::firefox();

$profile->setPreference('browser.download.folderList', 2);
$profile->setPreference('browser.download.manager.showWhenStarting', false);
$profile->setPreference('browser.download.dir', __DIR__.'/temp');
$profile->setPreference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf');

$caps->setCapability(FirefoxDriver::PROFILE, $profile);

RemoteWebDriver::create('http://localhost:4444/wd/hub', $caps);

其中一些首选项(例如 browser.helperApps.neverAsk.saveToDisk)在 about:config 页面上不存在。我可以手动添加它们,但即使这样做,我也无法在不询问我是否要保存的情况下让 Firefox 将文件下载到特定文件夹。

也许已经不可能了?

谢谢!

【问题讨论】:

不要使用FirefoxProfile,而是使用FirefoxOptions 如果我没记错的话,FirefoxOptions 不存在 ;( 如果php客户端没有实现,那么直接在capabilities中设置偏好。 抱歉我的回复晚了。我无法让它工作。正如你所说,我没有通过$profile 对象传递这些配置,而是使用setCapability 将它们直接传递给$caps 使用 FirefoxProfile 类,php web 驱动程序更新 firefox 配置。我检查了 about:config 页面,我有我需要的一切。 (它的工作原理主要是。当我手动保存文件时,Firefox 将其存储在配置的文件夹中)。 【参考方案1】:

好的。我发现了我的错误。我已将此标头配置为发送 pdf:

header('Content-Disposition: attachment; filename="filename.pdf"');

遗憾的是,attachment 选项使 Firefox 始终打开另存为窗口。将其更改为inline 即可解决问题。

顺便说一下,对于 Firefox 57++,这是正确的配置:

$profile = new FirefoxProfile();
$caps = DesiredCapabilities::firefox();

$profile->setPreference('browser.download.folderList', 2);
$profile->setPreference('browser.download.dir', __DIR__.'/temp');
$profile->setPreference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf');
$profile->setPreference('pdfjs.enabledCache.state', false);

$caps->setCapability(FirefoxDriver::PROFILE, $profile);

RemoteWebDriver::create('http://localhost:4444/wd/hub', $caps);

感谢https://***.com/a/47707635/2862917

PS:在 Windows 上,browser.download.dir 的路径必须是 \ 而不是 /

【讨论】:

以上是关于如何在 Firefox 58++ 上使用 PHP Webdriver for Selenium 下载文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在浏览器中显示 PHP 错误?我正在使用 Firefox 浏览器在 Linux 上工作 [重复]

如何在bluefish中使用firefox预览我的php文件?

在 jQuery 中克隆或向表单添加输入不会提交到 Firefox 中的 PHP

如何使用FireFox插件FirePHP调试PHP

安卓端Firefox 58版本更新 支持FLAC

如何使用FireFox插件FirePHP调试PHP