ukds

аюсь автоматизировать процесс входа в систему на основе Shibboleth дляСлужба данных Великобритании в R. Можнозарегистрируйтесь для входа в систему здесь, Предыдущая попытка автоматизировать этот процесс находится в этом вопросе,автоматизировать вход на веб-сайт службы данных Великобритании в R с помощью RCurl или httr.

Я думал, что отличные ответы на этот вопрос,как аутентифицировать сайт с несколькими именами хостов с помощью httr в Rсобирались отвезти меня туда, но я врезался в стену.

И да,RSelenium предоставляет альтернативукоторый я на самом деле пытался- но мой опыт сRSelenium является то, что он всегда отваливается (не говоря уже о том, что трудно работать на разных платформах), в то время какrvest/httr/RCurl решения не ломаются до тех пор, пока не изменится веб-сайт, и их легко начать работать на машинах других людей.

В любом случае, сайт требует, чтобы вы щелкнули по начальной странице входа (и получили куки), затем вошли в свою организацию (кликните и получите куки), затем введите ваше имя пользователя и пароль (куки), а затем (потому чтоrvest не поддерживает javascript) нажмите еще одну страницу для изменения файлов cookie, прежде чем попасть на страницу "Ваша учетная запись". Мне кажется, что куки на всех этапах необходимы - тот, который в конечном итоге означает, что вы вошли (ASPSESSIONIDSQAQSSQA) - это страница, созданная начальной страницей входа.

Так вот что у меня так далеко. Сначала перейдите на страницу организации и войдите в организацию, сохранив куки-файлы с начальной страницы входа (используя трюк здесь,Отправить форму без кнопки отправки в rvest, чтобы справиться с тем фактом, что кнопка отправки не активируется до тех пор, пока не будет введена организация).

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))

p2$response говорит "Поскольку ваш браузер не поддерживает JavaScript, вы должны нажать кнопку Продолжить один раз, чтобы продолжить", поэтому:

# 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))

К сожалению, вместо того, чтобы, наконец, быть "вашим аккаунтом",p3 на самом деле заводит нас обратно на странице входа организацииp0.

Одна потенциально важная проблема заключается в том, чтоc2 содержит дваJSESSIONID куки, которыеcookies(p2) шоу для разных доменов. Я не знаю, что с этим делать - я пытался сбросить сначала одну, а затем другую изc2 без удачи Какие-либо предложения? Спасибо!

Ответы на вопрос(0)

Ваш ответ на вопрос