У меня есть следующий код, который я заимствовал из предыдущего обсуждения Stackoverflow (Extracting data from javascript with R). Я басистски пытаюсь получить некоторые данные для некоторых фармацевтических препаратов. Когда я запускаю код для одного фармацевтического кода (2203), он работает просто отлично!R RSelenium и фантом в петле
appURL <- "http://web.sivicos.gov.co:8080/consultas/consultas/consreg_encabcum.jsp"
library(RSelenium)
pJS <- phantom(extras = c('--ssl-protocol=tlsv1'))
Sys.sleep(5) # give the binary a moment
remDr <- remoteDriver(browserName = "phantom")
remDr$open()
Sys.sleep(1) # give the binary a moment
remDr$navigate(appURL)
# Get the third list item of the select box (MEDICAMENTOS)
webElem <- remDr$findElement("css", "select[name='grupo'] option:nth-child(3)")
webElem$clickElement() # select this element
# Send text to input value="" name="expediente
webElem <- remDr$findElement("css", "input[name='expediente']")
webElem$sendKeysToElement(list(2203))
# Click the Buscar button
remDr$findElement("id", "INPUT2")$clickElement()
Sys.sleep(3) # give the binary a moment
remDr$switchToFrame(remDr$findElement("css", "iframe[name='datos']"))
remDr$findElement("css", "a")$clickElement() # click the link given in the iframe
# get the resulting data
appData <- remDr$getPageSource()[[1]]
# close phantom js
pJS$stop()
Но когда я положил его в петлю, так что я могу получить информацию для всех фармацевтических препаратов, мне нужно ... он сломается. Ниже приведен код внутри цикла.
for(cum in 2203){
appURL <- "http://web.sivicos.gov.co:8080/consultas/consultas/consreg_encabcum.jsp"
library(RSelenium)
pJS <- phantom(extras = c('--ssl-protocol=tlsv1'))
Sys.sleep(5) # give the binary a moment
remDr <- remoteDriver(browserName = "phantom")
remDr$open()
Sys.sleep(1) # give the binary a moment
remDr$navigate(appURL)
# Get the third list item of the select box (MEDICAMENTOS)
webElem <- remDr$findElement("css", "select[name='grupo'] option:nth-child(3)")
webElem$clickElement() # select this element
# Send text to input value="" name="expediente
webElem <- remDr$findElement("css", "input[name='expediente']")
webElem$sendKeysToElement(list(cum))
# Click the Buscar button
remDr$findElement("id", "INPUT2")$clickElement()
Sys.sleep(3) # give the binary a moment
remDr$switchToFrame(remDr$findElement("css", "iframe[name='datos']"))
remDr$findElement("css", "a")$clickElement() # click the link given in the iframe
# get the resulting data
appData <- remDr$getPageSource()[[1]]
# close phantom js
pJS$stop()
readHTMLTable(appData, which = 3)
}
Любые идеи о том, что происходит? Я попытался дать фантомное время, чтобы сделать что-то, поскольку я слышал, что это может быть проблемой, но это не сработало. Она не работает с одним кодом 2203 или с двумя с (2202,2203)
спасибо за создание пакета ... Это было спасатель! Я буквально скопировал и вставил ваш код, но он не работает. Я не уверен, что это потому, что мне нужно настроить useragent на что-то конкретное ... Я слушаю ваш веб-семинар http://cran.r-project.org/web/packages/RSelenium/vignettes/OCRUG-webinar .html прямо сейчас, и, надеюсь, я мог бы узнать кое-что, что мне не хватает. –
@MauricioRomero появляются проблемы с phantomjs2 и webdriver, исполняющие javascript в iframe. Я работал с использованием 'phantomExecute'. Однако на данный момент phantomJS2 выглядит слегка искаженным в режиме webdriver. Вы можете вернуться к фантому 1.98 или использовать другой браузер (chrome/firefox). – jdharrison