使用 rvest 登录网站后如何使用 R 注销网站
How do I logout of a website using R after logging into a website using rvest
我已经通过以下方法了解了如何登录网站:
登录码:
登录 <-"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
还是很陌生,对这一切没有正确的理解。因此,将不胜感激详细的帮助:
- 如何计算出注销字符串(我查看了控制台和 firefox 中的
XHR
但不确定使用哪一个)
- 我应该使用什么命令注销
提前致谢。
亲切的问候
我有一个进程,在登录后,查找并存储用于注销的 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 网站,变量是不可预测的和混乱的等等......所以当我发现这个方法奏效,我坚持了下来。
在你的情况下,前提是你
- 找到“注销”link并记住它;和
- 使用
on.exit
到rvest::jump_to(sess, logouturl)
我已经通过以下方法了解了如何登录网站:
登录码: 登录 <-"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
还是很陌生,对这一切没有正确的理解。因此,将不胜感激详细的帮助:
- 如何计算出注销字符串(我查看了控制台和 firefox 中的
XHR
但不确定使用哪一个) - 我应该使用什么命令注销
提前致谢。
亲切的问候
我有一个进程,在登录后,查找并存储用于注销的 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 网站,变量是不可预测的和混乱的等等......所以当我发现这个方法奏效,我坚持了下来。
在你的情况下,前提是你
- 找到“注销”link并记住它;和
- 使用
on.exit
到rvest::jump_to(sess, logouturl)