24 января 2017 г. вышла версия 1.7.1 пакета RSelenium. В прежних версиях RSelenium для скачивания и запуска Selenium-сервера использовались функции checkForServer
и startServer
. Теперь для этого используется одна функция — rsDriver
. Она возвращает среду (Environment), содержащую элементы "client" и "server", что позволяет управлять как клиентом, так и сервером.
По умолчанию rsDriver()
запускает браузер семейства Chrome. Остальные браузеры (firefox, PhantomJS, Internet Explorer) можно вызвать, указав соответствующее значение аргумента browser
. Кроме того, rsDriver()
проверяет, и при необходимости скачивает, обновления как самого Selenium, так и драйверов браузеров. Управляет этим аргумент check
.
Вот как теперь выглядит простейший сеанс работы с RSelenium:
library("RSelenium") # > 1.7.1
# Запускаем firefox без проверки обновлений
rd <- rsDriver(browser="firefox", check = F)
# Выбираем объект-браузер
browser <- rd$client
# Переходим на страницу Google
browser$navigate("http://www.google.com/ncr")
# Закрываем браузер
browser$close()
# Останавливаем сервер
rd$server$stop() # или так: rd[["server"]]$stop()
В конце сеанса желательно не только закрыть браузер, но и остановить сервер.
Рассмотрим теперь практический пример: получение данных по фьючерсам на свинец для заданного интервала времени.
Вот как выглядит фрагмент нужной страницы сайта ru.investing.com:
Разумеется, эта таблица создается динамически. Поэтому сначала нужно сформировать ее, задав требуемый диапазон дат, а уже затем извлечь информацию.
library("RSelenium")
# Запускаем firefox без проверки обновлений
rd <- rsDriver(browser="firefox", check = F)
# Выбираем объект-браузер
browser <- rd$client
# Задаем интервал времени
start <- "01/01/2017";
end <- "01/02/2017"
# Переходим на нужную страницу
browser$navigate("https://ru.investing.com/commodities/lead-historical-data?cid=959207")
# Выбираем искомый виджет
data_range <- browser$findElement(using = "css selector","#widgetFieldDateRange")
# Кликаем по нему, чтобы раскрыть
data_range$clickElement()
# Находим начальную дату
sd <- browser$findElement(using = "css selector","#startDate")
# Очищаем поле
sd$clearElement()
# Вводим нужную дату
sd$sendKeysToElement(list(start))
# Проделываем аналогичные операции с конечной датой
ed <- browser$findElement(using = "css selector","#endDate")
ed$clearElement()
ed$sendKeysToElement(list(end))
# Находим кнопку оправки дат
btn <- browser$findElement(using = "css selector","#applyBtn")
# Кликаем по ней
btn$clickElement()
# Сформированную таблицу средствами rvest
library(rvest)
page <- read_html(unlist(browser$getPageSource()))
tbl <- html_node(page,"#curr_table")
html_table(tbl)
# Закрываем браузер
browser$close()
# Останавливаем сервер
rd$server$stop()
В результате получим следующую таблицу:
Комментарии
comments powered by Disqus