【问题标题】:Rselenium - PopupRselenium - 弹出窗口
【发布时间】:2023-03-04 16:06:02
【问题描述】:

我想通过 Firefox 浏览器使用 RSelenium 从网站下载文件。 我做的一切都是正确的(导航,选择正确的元素并写下我想要的); 现在我单击“下载”按钮,然后会打开一个 firefox 弹出窗口并询问我是否要下载文件或“打开方式...”。

很遗憾,由于隐私限制,我无法编写示例。

我的问题是:如何切换到弹出窗口/警报并在需要时单击“确定”?

我尝试了以下方法都没有成功:

remDrv$acceptAlert()     -> tells me: NoAlertOpenError  
remDrv$executeScript("driver.switchTo().alert().accept()")

我也试过方法

remDrv$getWindowHandles()

但即使弹出窗口打开,该命令也只返回一个窗口(开始窗口,而不是弹出窗口),因此我无法使用:

remDrv$switchToWindow()

切换到弹出窗口。

有什么想法吗? 谢谢

【问题讨论】:

标签: r selenium popupwindow rselenium


【解决方案1】:

您看到的不是弹出窗口,而是下载对话框。下载对话框在所有浏览器中都是原生的,无法使用 JavaScript 进行控制。您可以将 Firefox 配置为自动下载某些文件类型。你没有给我们很多信息。 可以通过设置适当的配置文件来完成。这是一个下载一些财务数据的示例。我们在定制配置文件中设置了四个选项。在下载文件之前,我们必须跳过一些选择选项:

require(RSelenium)
fprof <- makeFirefoxProfile(list(browser.download.dir = "C:\\temp"
                                 ,  browser.download.folderList = 2L
                                 , browser.download.manager.showWhenStarting = FALSE
                                 , browser.helperApps.neverAsk.saveToDisk = "application/zip"))
RSelenium::startServer()
remDr <- remoteDriver(extraCapabilities = fprof)
remDr$open(silent = TRUE)
remDr$navigate("https://www.chicagofed.org/applications/bhc_data/bhcdata_index.cfm")
# click year 2012
webElem <- remDr$findElement("name", "SelectedYear")
webElems <- webElem$findChildElements("css selector", "option")
webElems[[which(sapply(webElems, function(x){x$getElementText()}) == "2012" )]]$clickElement()

# click required quarter

webElem <- remDr$findElement("name", "SelectedQuarter")
Sys.sleep(1)
webElems <- webElem$findChildElements("css selector", "option")
webElems[[which(sapply(webElems, function(x){x$getElementText()}) == "4th Quarter" )]]$clickElement()

# click button

webElem <- remDr$findElement("id", "downloadDataFile")
webElem$clickElement()

【讨论】:

  • 感谢您的回复,您的示例有效。不幸的是,我下载文件的扩展名是 .DAT,我尝试了 browser.helperApps.neverAsk.saveToDisk = "DAT file, application/octet-stream, zz-application/zz-winassoc-dat, application/x-download, application/ octet-binary”没有成功。我忘了说我在Mac电脑上,会不会有什么影响?
  • 您需要发现服务器为此文件发送的 mime 类型。
  • 嗨@jdharrison,你对我找到服务器发送的mime类型有什么建议吗?该文件是 .dat,建议的 mime 类型是“application/octet-stream”,我尝试过但没有成功。是否有任何选项可以对 Firefox 说“无需询问即可下载所有内容”?提前致谢
  • Firefox 没有下载一切设置。如果您使用的是 Mac,要获取 mime 类型,可以尝试使用 httpscoop 或 burpproxy 之类的方法。您可以将 HttpFox 之类的东西与 firefox 一起使用,这非常简单。 “.dat”文件可以是任何东西,它实际上取决于服务器作为 mime 类型发送的内容。使用任何流量嗅探器都应该很容易获得 mime 类型,不幸的是,如果没有特定的 url,我无法为您提供任何帮助。
  • 您的“.dat”文件是纯文本吗?你可以试试“text/plain”mime 类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多