Взаимодействовать со всеми элементами в списке в R - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь взаимодействовать со всеми элементами списка в R. Точно, я пытаюсь щелкнуть по всем элементам в списке, используя RSelenium, используя функцию clickElement (). Я собираю данные с этой веб-страницы: https://play.google.com/store/apps/details?id=hr.mireo.arthur&hl=en&fbclid=IwAR3c-PkUXOea8KrKLp9Q3JUjCidGmgO2jYX_Qb7O8VuWlHXPIS5nDOfKRKI&showAllReviews=true

Вот мой код:

    url <- 'https://play.google.com/store/apps/details?id=hr.mireo.arthur&hl=en&fbclid=IwAR3c-PkUXOea8KrKLp9Q3JUjCidGmgO2jYX_Qb7O8VuWlHXPIS5nDOfKRKI&showAllReviews=true'
#Open webpage using RSelenium
    rD <- rsDriver(port = 4445L, browser=c("chrome"), chromever="80.0.3987.106")
    remDr <- rD[["client"]]
    remDr$navigate(url)
    #-----------------------------------------Load whole page by scrolling and showing more
    xp_show_more <- "//*[@id='fcxH9b']/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div[2]/div"
    replicate(5,
              {
                replicate(5,
                          {
                            # scroll down
                            webElem <- remDr$findElement("css", "body")
                            webElem$sendKeysToElement(list(key = "end"))
                            # wait
                            Sys.sleep(1)
                          })
                # find button
                morereviews <- remDr$findElement(using = 'xpath', xp_show_more)
                # click button
                tryCatch(morereviews$clickElement(),error=function(e){print(e)}) # trycatch to prevent any error from stopping the loop
                # wait
                Sys.sleep(3)
              })

Этот код загрузит всю страницу и покажет все комментарии, но некоторые комментарии длинные и имеют кнопки «Полный обзор», которые нужно нажимать, чтобы показать всю длину комментария. Мне удалось найти все эти кнопки (их 36), используя функцию «findElements» с следующим кодом:

fullreviews <- remDr$findElements(using = 'css selector', value = ".OzU4dc")

Этот код приводит к списку из 36 элементов, и когда я хочу нажать на они используют этот код:

fullreviews$clickElement()

Я получаю эту ошибку: Ошибка: попытка применить не-функцию

Я могу нажать на все 36 элементов, используя эти 36 строк кода:

fullreviews[[1]]$clickElement()
fullreviews[[2]]$clickElement()
fullreviews[[3]]$clickElement()

... и так далее до 36.

Но я бы хотел сделать это возможным с помощью одной функции. На случай, если мне придется почистить большую веб-страницу и нажать тысячи элементов.

Я пробовал этот код, но он не работает

fullreviews[[1:36]]$clickElement()

Я думаю, что-то вроде ошибки нужна функция, но я не могу создать работающую. Есть ли способ сделать это в одной функции l oop или функции?

...