2017-05-07 1 views
0

Je suis aux prises avec les lignes de code suivantes depuis quelques heures maintenant et je ne semble toujours pas être proche d'une solution. Mon code est le suivant:Obtenir le texte d'un élément à l'aide de RSelenium

#create a list of all the question elements on the page 
questions <- remDr$findElements(using = 'xpath', "//div[@class='question-text']") 

#get the first question element in the list 
question <- questions[1] 

#get the text of the question element 
question$getElementText() 

Quand je débogage à l'aide rstudio, il semble que la liste des questions est correctement renseigné avec tous les éléments « question »; l'item 'question' est rempli correctement avec le premier élément 'question' de la liste; mais beaucoup de variations sur la ligne de code suivante, destinée à obtenir le texte dans l'élément de question, semblent tous à l'échec, ce qui donne l'erreur suivante:

Error in evalq({ : attempt to apply non-function 

Il est possible que l'erreur provient d'une autre partie de la code, mais très peu probable, car commenter cette ligne semble laisser tout le reste fonctionne parfaitement.

Je serais très reconnaissant pour toute aide que vous et les filles pourriez être en mesure de fournir. Je programme en R en utilisant RSelenium - comme vous pouvez probablement le dire, je suis nouveau à R bien que j'ai une expérience très limitée en utilisant Selenium dans d'autres environnements.

Merci d'avance pour vos commentaires!

+0

Bienvenue sur SO. Veuillez passer la souris sur l'étiquette R - il vous est demandé de fournir un exemple reproductible minimal. Votre exemple n'est pas reproductible: l'exécution du code donne _ "Erreur: objet 'remDr' non trouvé" _. – lukeA

+0

Excuses Luke, J'essayais de donner l'exemple le plus court possible pour illustrer le problème mais évidemment j'ai négligé de donner un exemple reproductible. Je vais essayer de faire mieux la prochaine fois. – thunderbuck88

+0

À moins que vous n'ayez déclaré que vous êtes en train d'extraire une ressource de travail interne qui ne peut pas être partagée, l'URL que vous allez indiquer aux gens à qui ils s'adressent sera utile s'ils assistent une personne impliquée dans un vol de propriété intellectuelle. – hrbrmstr

Répondre

3

question n'a pas de fonction appelée getElementText; c'est un objet list au lieu d'un objet webElement. Vous avez besoin [[ au lieu de [ - consulter cet exemple:

library(RSelenium) 
rD <- rsDriver(port=4444L, browser = "phantomjs") 
remDr <- rD[["client"]] 
remDr$navigate(
    "http://stackoverflow.com/questions/43833649/get-element-text-using-rselenium") 
elems <- remDr$findElements(using = 'xpath', "//a") 
elem <- elems[1] 
class(elem) 
# [1] "list" 
elem$getElementText() 
# Error: attempt to apply non-function 

maintenant

elem <- elems[[1]] 
class(elem) 
# [1] "webElement" 
elem$getElementText() 
# [[1]] 
# [1] "Stack Overflow" 
elem$getElementText()[[1]] 
# [1] "Stack Overflow" 
remDr$close() 
rD[["server"]]$stop()