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


céphalopode

J'ai trouvé comment me connecter à un site Web à partir des éléments suivants :

  1. https://riptutorial.com/r/example/23955/using-rvest-when-login-is-required

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 rvestet je n'ai pas une bonne compréhension de tout cela. Par conséquent, apprécierait une aide détaillée:

  1. Comment calculer la chaîne de déconnexion (j'ai regardé dans la console et XHRdans firefox mais je ne sais pas lequel utiliser)
  2. Quelle commande dois-je utiliser pour me déconnecter

Merci d'avance.

Sincères amitiés

r2evans

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

  1. trouvez le lien « déconnexion » et mémorisez-le ; et
  2. utiliser on.exitpourrvest::jump_to(sess, logouturl)

Articles connexes