Я, вероятно, не вижу ничего очевидного, так или иначе, мне бы хотелось создать функции автоматического извлечения текста из URL-адреса, уже обработанного удаленным драйвером. Я хотел бы передать в качестве аргументов функции выражения XPath и окружающую среду, в которую удаленный драйвер может быть найденR, проходящий в среде драйвера RSelenium как аргумент функции
library(RSelenium)
url="http://stackoverflow.com/search?q=r+program"
remdir<-remoteDriver(remoteServerAddr = "localhost", port = 4444, browserName = "firefox")
remdir$open()
remdir$navigate(url)
env<-environment()
#env should be the environment in wich remdir exist (remdir itself?)
#xp the xpath expression to evaluate in the form "//*"
fun.XpathExtractText<-function(xp,env)
{
cat("\ncheck if session open\n")
#look in env for an open session
if ((eval(quote(is.na(remdir$sessionid)),envir = env)))
stop("ERROR NO SESSION ID open new one")
cat("session found\n")
#accept xpath expression as is
xp <- substitute(xp)
txt<-c()
#build the call to env
cat("calling\n")
call<-paste0("remdir$findElements(using = \"xpath\",\"",as.character(xp),"\")")
tgt<-eval(as.name(call),envir = env)
cat("Target locked\n")
txt<-lapply(tgt,function(c){c$getElementText()})
return(txt)
}
Возможного вызовом этой функции может быть fun.XpathExtractText("//*",env)
Но вскоре после того, как сборка вызова часть здесь идет сообщение об ошибке:
Error in eval(expr, envir, enclos) :
object 'remdir$findElements(using = "xpath","//*")' not found
но если я exectute в окр непосредственно вызов извлекается из ошибки сообщения оно будет работать.
tgt<-remdir$findElements(using = "xpath","//*")
Я попытался пройти в среду также remdir себя, как это среда, но это не считается вообще, функция застревают в той же точке, после сборки вызова. Что я не знаю?
'remdir' является объектом класса сравнения. Вы можете передать его в свою функцию. Он будет передан по ссылке. Затем вы можете использовать его внутри своей функции, как и снаружи. – jdharrison
Большое спасибо !!! в любом случае 'if ((eval (quote (is.na (remdir $ sessionid)), envir = env))))' он работал, поэтому мне было интересно, почему. В любом случае, вы решили мою проблему, еще раз спасибо. – Malacoda