使用 rvest 登录网站后如何使用 R 注销网站

How do I logout of a website using R after logging into a website using rvest

我已经通过以下方法了解了如何登录网站:

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

登录码: 登录 <-"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)

我现在正在寻找解决下一个问题,即如何准确地从 R 中注销网站。

我对使用 rvest 还是很陌生,对这一切没有正确的理解。因此,将不胜感激详细的帮助:

  1. 如何计算出注销字符串(我查看了控制台和 firefox 中的 XHR 但不确定使用哪一个)
  2. 我应该使用什么命令注销

提前致谢。

亲切的问候

我有一个进程,在登录后,查找并存储用于注销的 URL。

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
  # ...
  # ...
}

当然,这相当冗长而且 drawn-out,但是对于 my 网站,变量是不可预测的和混乱的等等......所以当我发现这个方法奏效,我坚持了下来。

在你的情况下,前提是你

  1. 找到“注销”link并记住它;和
  2. 使用on.exitrvest::jump_to(sess, logouturl)