【发布时间】:2017-12-29 11:20:20
【问题描述】:
我需要使用 Java 中的无头 Web 浏览器下载文件。我检查了HtmlUnit,在一些简单的情况下我可以下载文件,但是当Ajax初始化下载时我无法下载(实际上它更复杂,因为有两个请求,第一个下载第二个请求实际下载文件的URL从给定的 URL)。我已经用 Selenium 替换了 HtmlUnit。我已经检查了两个 WebDriver,HtmlUnitDriver 和 ChromeDriver。
- HtmlUnitDriver - 类似 HtmlUnit 的行为
-
ChromeDriver - 我可以在可见模式下下载文件,但是当我打开无头模式时,不再下载文件
ChromeOptions lChromeOptions = new ChromeOptions(); HashMap<String, Object> lChromePrefs = new HashMap<String, Object>(); lChromePrefs.put("profile.default_content_settings.popups", 0); lChromePrefs.put("download.default_directory", _PATH_TO_DOWNLOAD_DIR); lChromeOptions.setExperimentalOption("prefs", lChromePrefs); lChromeOptions.addArguments("--headless"); return new ChromeDriver(lChromeOptions);
我知道出于安全原因,以无头模式下载文件已关闭,但必须有一些解决方法
我之前使用过 2.28 httpunit,几分钟前我开始使用 2.29,但 Ajax 功能似乎在某处停止。这是我点击后检索数据并期望文件数据的方式:_link.click().getWebResponse().getContentAsStream()
WebConnectionWrapper 是否显示网站上的所有请求/响应?你知道我怎样才能调试它以获得更好的洞察力吗?我看到单击链接后 Ajax 函数的第一部分被正确调用(此函数中有 2 个 http 请求)。在WebConnectionWrapper -> getResponse 中获取第一个响应后,我什至尝试创建我的自定义 http 请求以检索数据/文件,但它返回 404 错误,这表明第二个请求已以某种方式完成,但我在 @ 中也没有看到任何日志/调试信息987654323@也不是WebConnectionWrapper -> getResponse()
【问题讨论】:
-
HtmlUnit 在这里适用于 PrimeFaces 完成的所有 ajax 魔法。如果您愿意,我们可以尝试为您提供帮助。但是你必须分享更多细节,也许 HtmlUnit 用户列表是讨论此类问题的地方。
-
实际上我无法在此处提供我使用的网站的链接,但是在使用 HtmlUnit 时,我使用了:WebConnectionWrapper 并调试每个请求/响应。 Ajax 函数在中间停止(在第一个 HTTP 请求完成后,没有出现下载所需数据/文件的第二个 HTTP 请求)。 ajax 函数被混淆了,所以把它们放在这里是没有用的
-
如果你使用某种库,也许有机会找到一个公开的演示。如果没有机会对此进行调试,很难猜测出了什么问题。你用过最新版本吗? 2.28 版本在 Promise 方面有一些很大的改进。也许值得尝试最新的(昨天的 2.29 ;-)
-
我检查了 2.29v 并添加到主题附加信息
标签: java file selenium download selenium-chromedriver