我的下载代码停止工作,因为我的代码停止传递" extraCapabilities"正常。
这是以前的工作:
require(RSelenium)
require(XML)
require(data.table)
source(file.path(find.package("RSelenium"), "examples/serverUtils/checkForServer.r"))
source(file.path(find.package("RSelenium"), "examples/serverUtils/startServer.r"))
checkForServer();
server<-startServer()
referencedirectory <- "d://temp"
fprof <- makeFirefoxProfile(list(browser.download.dir = referencedirectory, browser.download.folderList = 2L, browser.download.manager.showWhenStarting = FALSE,
browser.helperApps.neverAsk.saveToDisk="text/xml",browser.tabs.remote.autostart = FALSE,browser.tabs.remote.autostart.2 = FALSE,browser.tabs.remote.desktopbehavior = FALSE))
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4444, browserName = "firefox",extraCapabilities = fprof)
remDr$open()
现在它抛出一个错误:
Selenium message:Profile has been set on both the capabilities and these options, but they're different. Unable to determine which one you want to use.
Error: Summary: UnknownError
Detail: An unknown server-side error occurred while processing the command.
class: java.lang.IllegalStateException
Further Details: run errorDetails method
我尝试了另一种选择:
rD <- rsDriver(port = 4444L, browser = "firefox", version = "latest", geckover = "0.15.0", iedrver = NULL, phantomver = "2.1.1",
verbose = TRUE, check = TRUE, extraCapabilities = fprof)
除了抱怨之外,这会产生同样的错误(这些投诉不会导致错误):
Selenium message:wrong number of arguments
如果删除了extraCapabilities,则执行上述代码,但如果您尝试:
rD <- rsDriver(port = 4446L, browser = "firefox", version = "latest", geckover = "0.15.0", iedrver = NULL, phantomver = "2.1.1",
verbose = TRUE, check = TRUE)
remDr <- rD[["client"]]
fprof <- makeFirefoxProfile(list(browser.download.dir = "D:/temp"))
remDr <- remoteDriver(extraCapabilities = fprof)
remDr$open()
在最后一行之后会出现相同的错误。 rsDriver打开一个浏览器,但该浏览器没有任何所需的属性。如果在尝试分配remDr并打开它之前关闭浏览器(不关闭服务器),您仍会得到相同的错误。
我已经尝试了驱动程序和服务器3.1.0的版本13,14和15,结果相同。
我在Java中找到了引发错误的行,但我无法弄清楚如何传递与在幕后自动生成的Firefox配置文件不同的Firefox配置文件。我已经尝试了各种版本的&#34; Profile&#34; /&#34; requiredProfile&#34; /&#34; FirefoxProfile&#34;等,但这并没有被认为是有效的输入......我也看到了一些关于如何在Java中完成的讨论,但在R中没有。
直到大约36个小时之前,代码一直在为我工作,从那以后我一直试图找到解决方法。我现在完全失去了。
更新:对版本组合非常敏感的设置。全新的Selenium服务器版本(3.3.1)可与Gecko 0.15.0和Firefox 52配合使用。其他一些组合可能有效,但绝大多数都没有。
此外,在设置文件夹位置字符串时,您需要小心。在R中的大多数上下文中,正斜杠/
与操作系统无关,因此,我在UNIX和Windows中大多数时候都使用它。但是,在Windows中设置browser.download.dir
时,显然必须使用(转义)反斜杠\\
。否则,目录分配似乎可行,但事实并非如此。
最后,rsDriver
的推荐方法有效,而已失效函数的方法也可以再次使用(checkForServer()
和startServer
)。需要学习的经验:在选择更新Selenium代码时,不要像我一样不走运
答案 0 :(得分:0)
geckodriver(0.15.0)/ selenium(3.3.0)似乎存在问题。我使用了以下内容:
library(RSelenium)
referencedirectory <- "c://temp"
fprof <- makeFirefoxProfile(list(browser.download.dir = referencedirectory, browser.download.folderList = 2L, browser.download.manager.showWhenStarting = FALSE,
browser.helperApps.neverAsk.saveToDisk="text/xml",browser.tabs.remote.autostart = FALSE,browser.tabs.remote.autostart.2 = FALSE,browser.tabs.remote.desktopbehavior = FALSE))
rD <- rsDriver(port = 4444L, browser = "firefox", version = "3.1.0", geckover = "0.14.0", iedrver = NULL, phantomver = "2.1.1",
verbose = TRUE, check = TRUE, extraCapabilities = fprof)
似乎正常运作。如文档中所述,我建议尽可能使用Docker镜像运行Selenium Server,以防止浏览器/驱动程序版本不兼容的问题。
更新
有一个更新版本的selenium服务器现在应该解决这个问题:
rD <- rsDriver(port = 4444L, browser = "firefox", version = "3.3.1", geckover = "0.15.0",
verbose = TRUE, check = TRUE, extraCapabilities = fprof)
答案 1 :(得分:0)
看来您真的不需要makefireprof。 代码确实非常简单:
remDr=rsDriver(browser=browserName,extraCapabilities=list(acceptInsecureCerts=TRUE,acceptUntrustedCerts=TRUE))