Я пытаюсь загрузить 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-файл, который динамически создается и возвращается сайтом, а затем сохранить его под именем по своему выбору?
(Я прошу прощения за то, что не могу предоставить ссылки на сайт, но это частный сайт, которым я не могу делиться публично. Однако я ожидаю, что эта проблема может быть полезна большему количеству людей и большему количеству сайтов).