Как перехватить документ, сгенерированный сайтом (используя R)

Я пытаюсь загрузить pdf-файлы следующим образом: (поскольку это коммерческий сайт, мне пришлось заменить URL-адрес, имя пользователя и пароль ниже)

## login to the site first
library(RSelenium)
RSelenium::checkForServer()
RSelenium::startServer(log = TRUE, invisible = FALSE)
remDr <- remoteDriver(browserName = "chrome")
remDr$open()
remDr$setImplicitWaitTimeout(3000)
remDr$navigate(url)   # the url of the login page
remDr$findElement("id", "LoginForm_username")$sendKeysToElement(list("user"))
remDr$findElement("id", "LoginForm_password")$sendKeysToElement(list("pass"))
remDr$findElement("name", "start")$clickElement()   ## this is the login button

Это сайт, который содержит данные о взаимодействии фирм. Зная API, я выяснил, какое имя страницы для каждого интересующего меня отчета. На странице есть кнопка «скачать pdf». Когда я нажимаю эту кнопку, сайт динамически генерирует отчет в формате pdf и возвращает отчет (со случайным именем, например «97da08491e3e41447f591c2b668c0602.pdf». Я думаю, что он использует для этого wkhtml2pdf. Я нажимаю кнопку, используя следующий код:

# pp is the name of a link for a given report
remDr$navigate(pp)
Sys.sleep(7) # wait for the page to load
remDr$findElement("id", "download-pdf")$clickElement()

При нажатии кнопки «скачать pdf» документ создается сайтом, а затем сохраняется в Chrome. (случайное имя каждый раз разное, и я никак не могу использовать что-то вроде download.file(), чтобы получить его) Это работает нормально, за исключением того, что документ сохраняется с этим случайным именем. Скорее, я хочу захватить PDF-файл, возвращаемый сайтом, а затем сохранить его, используя более информативное имя (мне приходится делать это сотни раз, поэтому я не хочу просматривать все PDF-файлы вручную, чтобы найти отчет по конкретным фирмам).

Итак, мой вопрос: как я могу захватить PDF-файл, который динамически создается и возвращается сайтом, а затем сохранить его под именем по своему выбору?

(Я прошу прощения за то, что не могу предоставить ссылки на сайт, но это частный сайт, которым я не могу делиться публично. Однако я ожидаю, что эта проблема может быть полезна большему количеству людей и большему количеству сайтов).


person Steve G. Jones    schedule 11.04.2015    source источник


Ответы (1)


Вы можете манипулировать файлами в папке загрузки с помощью R. Я бы просто перечислил файлы:

L <- dir(".",pattern="*.pdf")

При необходимости вы можете выбрать последний PDF-файл, используя информацию из:

 file.info(L)

А затем измените имя файла, используя

file.rename(identifiedName, meaningFullName)
person cmbarbu    schedule 13.04.2015
comment
Спасибо, это действительно помогает. Я надеялся найти способ захватить документ до того, как он окажется в моей папке загрузки, но это рабочая альтернатива. - person Steve G. Jones; 22.04.2015