【问题标题】:How to catch a document that is generated by a site (using R)如何捕获由站点生成的文档(使用 R)
【发布时间】:2015-06-17 01:30:19
【问题描述】:

我正在尝试下载 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,然后以我自己选择的名称保存?

(对于无法提供该网站的链接,我深表歉意,但这是一个专有网站,我不允许公开分享。但是,我希望这个问题可能对更多人和更多网站有用)。

【问题讨论】:

    标签: r httr rvest rselenium


    【解决方案1】:

    您可以使用 R 操作下载文件夹中的文件。我只是列出这些文件:

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

    如果需要,您可以使用以下信息选择最后一个 PDF:

     file.info(L)
    

    然后使用

    更改文件名
    file.rename(identifiedName, meaningFullName)
    

    【讨论】:

    • 谢谢,这确实有效。我希望找到一种方法在文档最终进入我的下载文件夹之前捕获它,但这是一个可行的替代方案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多