Date Категория comp Теги R / selenium

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