Comment puis-je me déconnecter d'un site Web à l'aide de R après m'être connecté à un site Web à l'aide de rvest
J'ai trouvé comment me connecter à un site Web à partir des éléments suivants :
Code de connexion : login <-"https://www.mysite.com.au/"
pgsession <- html_session(login)
pgform <- html_form(pgsession)[[2]] #
filled_form <- set_values(pgform,
'ctl00$Content$Login' = "bangbang",
'ctl00$Content$Password' = "xxxxxx")
submit_form(pgsession, filled_form)
Je cherche maintenant à résoudre le prochain problème sur la façon exacte de se déconnecter du site Web de R.
- Le site Web auquel je me connecte a un bouton de déconnexion, que j'utilise lorsque je me déconnecte via un navigateur
Je suis encore très novice en matière d'utilisation rvest
et je n'ai pas une bonne compréhension de tout cela. Par conséquent, apprécierait une aide détaillée:
- Comment calculer la chaîne de déconnexion (j'ai regardé dans la console et
XHR
dans firefox mais je ne sais pas lequel utiliser) - Quelle commande dois-je utiliser pour me déconnecter
Merci d'avance.
Sincères amitiés
J'ai un processus qui, après la connexion, trouve et stocke l'URL utilisée pour se déconnecter.
myfunc <- function(user, pass) {
sess <- rvest::html_session(myurl)
############################################################
### all of this is particular to the URL that *I* am scraping ... adapt for your own
loginform <- sess %>%
rvest::html_nodes("form") %>%
rvest::html_form()
formtypes <- lapply(loginform[[1]]$fields, `[[`, "type")
formuser <- names(Filter(function(a) a == "text", formtypes))
formpass <- names(Filter(function(a) a == "password", formtypes))
formsubmit <- names(Filter(function(a) a == "submit", formtypes))
formfields <- setNames(list(user, pass), c(formuser, formpass))
formfields <- do.call(rvest::set_values, c(list(loginform[[1]]), formfields))
loggedin <- rvest::submit_form(sess, formfields, formsubmit)
# ... okay, now I'm logged in
############################################################
### this next section is pertinent to your need to find and eventually
### use the logout link in your html session
# prepare for eventual logout
logoutnodes <- rvest::html_nodes(loggedin, "a")
logoutlinks <- rvest::html_attr(logoutnodes, "href")
logouttexts <- rvest::html_text(logoutnodes)
logoutind <- grep("log.*out", logouttexts, ignore.case = TRUE)
logouturl <- logoutlinks[ logoutind[[1]] ]
# ignore errors on logout attempt
on.exit({
# this code executes when 'myfunc' exits ... for whatever reason
tryCatch(rvest::jump_to(loggedin, logouturl),
error = function(e) NULL)
}, add = TRUE)
############################################################
# now we can do the real purpose of myfunc
# ...
# ...
}
Certes, c'est plutôt verbeux et fastidieux, mais avec mon site Web, les variables sont imprévisibles et encombrées et ainsi de suite... alors quand j'ai découvert que cette méthode fonctionnait, je m'y suis accroché.
Dans votre cas, le principe est que vous
- trouvez le lien « déconnexion » et mémorisez-le ; et
- utiliser
on.exit
pourrvest::jump_to(sess, logouturl)