R:使用rvest(或httr)登录到需要cookie的站点

R:使用rvest(或httr)登录到需要cookie的站点,r,cookies,rvest,shibboleth,httr,R,Cookies,Rvest,Shibboleth,Httr,我正在尝试自动化基于shibboleth的登录过程。在此问题中可以找到以前尝试自动化此过程的尝试 我以为这个问题的优秀答案会让我达到目的,但我遇到了麻烦 是的,RSelenium提供了另一种选择——但我对RSelenium的经验是,它总是在爆炸(更不用说很难跨平台工作),而rvest/httr/RCurl解决方案不会中断,除非或直到网站发生变化,并且很容易在其他人的机器上工作 无论如何,该网站要求您点击初始登录页面(并获取cookie),然后进入您的组织(点击并获取cookie),然后输入您的用

我正在尝试自动化基于shibboleth的登录过程。在此问题中可以找到以前尝试自动化此过程的尝试

我以为这个问题的优秀答案会让我达到目的,但我遇到了麻烦

是的,
RSelenium
提供了另一种选择——但我对
RSelenium
的经验是,它总是在爆炸(更不用说很难跨平台工作),而
rvest
/
httr
/
RCurl
解决方案不会中断,除非或直到网站发生变化,并且很容易在其他人的机器上工作

无论如何,该网站要求您点击初始登录页面(并获取cookie),然后进入您的组织(点击并获取cookie),然后输入您的用户名和密码(cookie),然后(因为
rvest
不执行javascript)在登录到“您的帐户”之前,再点击一个cookie修改页面页在我看来,所有步骤中的cookies都是必需的,最终表示您已登录的cookies(
aspsessionidsqaqsqa
)是初始登录页面创建的cookies

这就是我到目前为止所得到的。首先,进入organization页面并输入organization,保存初始登录页面中的cookies(使用此处的技巧,以应对submit按钮在输入organization之前不会激活的事实)

不幸的是,
p3
并没有最终成为“您的账户”,而是让我们回到了组织条目页面
p0


一个潜在的重要问题是,
c2
包含两个
JSESSIONID
cookies,这些cookies是为不同的域显示的。我不知道该怎么办——我试着先从
c2
中删除一个,然后再删除另一个,但运气不好。有什么建议吗?谢谢

你说得对。硒并不总是值得信赖的。但当我试着打电话时,它要求我等三天才能提供用户名和密码凭据。这很有趣。我在其他几个密码、cookie、会话搜索网站上工作过。所以我会努力的!我真的很感激
RSelenium
实现底层项目的API。根据我的经验,主要是底层项目的问题给用户带来了问题。这很公平。结语:我最终克服了我对
RSelenium
的疑虑-使用Chrome和保持文件管理分离帮助并将我的解决方案写成了一个包。
library(tidyverse)
library(rvest)
library(stringr)

org <- "your_organization"
user <- "your_username"
password <- "your_password"

signin <- "http://esds.ac.uk/newRegistration/newLogin.asp"
handle_reset(signin)

# get to org page and enter org
p0 <- html_session(signin) %>% 
    follow_link("Login")
org_link <- html_nodes(p0, "option") %>% 
    str_subset(org) %>% 
    str_match('(?<=\\")[^"]*') %>%
    as.character()

f0 <- html_form(p0) %>%
    first() %>%
    set_values(origin = org_link)
fake_submit_button <- list(name = "submit-btn",
                           type = "submit",
                           value = "Continue",
                           checked = NULL,
                           disabled = NULL,
                           readonly = NULL,
                           required = FALSE)
attr(fake_submit_button, "class") <- "btn-enabled"
f0[["fields"]][["submit"]] <- fake_submit_button

c0 <- cookies(p0)$value
names(c0) <- cookies(p0)$name
p1 <- submit_form(session = p0, form = f0, config = set_cookies(.cookies = c0))
# enter user and password
f1 <- html_form(p1) %>%
    first() %>%
    set_values("j_username" = user,
               "j_password" = password)
c1 <- cookies(p1)$value
names(c1) <- cookies(p1)$name
p2 <- submit_form(session = p1, form = f1, config = set_cookies(.cookies = c1))
# click through
f2 <- p2 %>%
    html_form() %>%
    first()
c2 <- cookies(p2)$value
names(c2) <- cookies(p2)$name

p3 <- submit_form(p2, f2, config = set_cookies(.cookies = c2))