Используйте R Selenium для борьбы с всплывающими окнами. - PullRequest
0 голосов
/ 14 марта 2019

Как я могу перейти к ссылке, щелкнуть ссылку и почистить данные оттуда?

Я попробовал этот код, но безуспешно.

library("RSelenium")
startServer()
mybrowser <- remoteDriver()
mybrowser$open()
mybrowser$navigate("https://finance.yahoo.com/quote/SBUX/balance-sheet?p=SBUX")
# click 'Quarterly' button...

Что-то вроде того, это близко.

Тестирование обновленного кода сейчас; результаты ниже.

> rm(list=ls())
> 
> 
> library("RSelenium")
> startServer()
Error: startServer is now defunct. Users in future can find the function in
    file.path(find.package("RSelenium"), "examples/serverUtils"). The
    recommended way to run a selenium server is via Docker. Alternatively
    see the RSelenium::rsDriver function.
> mybrowser <- remoteDriver()
> mybrowser$open()
[1] "Connecting to remote server"
Error in checkError(res) : 
  Undefined error in httr call. httr output: Failed to connect to localhost port 4444: Connection refused
> mybrowser$navigate("https://finance.yahoo.com/quote/SBUX/balance-sheet?p=SBUX")
Error in checkError(res) : 
  Undefined error in httr call. httr output: length(url) == 1 is not TRUE
> mybrowser$findElement("xpath", "//button[text() = '
+                       
+                       OK
+                       ']")$clickElement()
Error in checkError(res) : 
  Undefined error in httr call. httr output: length(url) == 1 is not TRUE
> mybrowser$findElement("xpath", "//span[text() = 'Quarterly']")$clickElement()
Error in checkError(res) : 
  Undefined error in httr call. httr output: length(url) == 1 is not TRUE
> 

1 Ответ

1 голос
/ 14 марта 2019

Я думаю, что это может быть случай, когда вы сталкиваетесь с этим на веб-сайте.

enter image description here

Вы можете просто "нажать" кнопку OK с помощью:

mybrowser$findElement("xpath", "//button[text() = '

                            OK
                    ']")$clickElement()

И затем вы можете нажать «ежеквартально» с помощью:

mybrowser$findElement("xpath", "//span[text() = 'Quarterly']")$clickElement()

(Подсказка: для выявления подобных ошибок может быть полезно проверить текущее состояние браузера с помощью: remDr$screenshot(TRUE).)

Я не уверен, что он обновлен, но некоторые данные также доступны через API, вы можете проверить пакет Quantmod, чтобы получить более легкий доступ.

Полный пример:

library("RSelenium")
startServer()
mybrowser <- remoteDriver()
mybrowser$open()
mybrowser$navigate("https://finance.yahoo.com/quote/SBUX/balance-sheet?p=SBUX")
mybrowser$findElement("xpath", "//button[text() = '

                            OK
                    ']")$clickElement()
mybrowser$findElement("xpath", "//span[text() = 'Quarterly']")$clickElement()
...