gpt4 book ai didi

r - 在 R 中使用 rvest 跟踪页面重定向

转载 作者:行者123 更新时间:2023-12-03 19:50:27 25 4
gpt4 key购买 nike

我是 R 和 rvest 的新手。我正在尝试使用这些从允许使用雅典学术登录系统登录的网站 (www.medicinescomplete.com) 获取信息。在浏览器中,当您单击雅典登录按钮时,它会将您转到雅典登录表单。提交用户凭据后,表单会将浏览器重定向回原始站点但已登录。

我使用 submit_form() 函数将凭据提交到雅典表单中,这将返回 200 代码。但是,R 不像浏览器那样跟随重定向,如果我使用 jump_to() 命令返回原始站点,它不会登录。我怀疑登录页面返回的重定向链接可能包含登录我需要凭据,但我不知道如何找到链接并使用 rvest 发送它

有没有人研究过如何使用 rvest 通过雅典登录,或者对如何使其遵循自动重定向有任何想法?

我用来做到这一点的代码是(登录凭据已更改):

library(rvest)
library(magrittr)

url <- "https://www.medicinescomplete.com/about/"
mcsession <- html_session(url)
mcsession <- jump_to(mcsession, "/mc/athens.htm? uri=https%3A%2F%2Fwww.medicinescomplete.com%2Fabout%2F")
athensform <- html_form(mcsession)[[1]]
athensform <-set_values(athensform, ath_uname = "xxx", ath_passwd = "yyy")
submit_form(mcsession, athensform)
jump_to(mcsession, "https://www.medicinescomplete.com/mc/bnf/current/")

我得到了 submit_form() 步骤的 200 代码,但最后一行的 jump_to() 得到了 403 禁止代码。

然后我将 submit_form 步骤通过管道传输到 html() 并打印出来。从我可以看出这是一个成功的登录,但在主页的正文中有一行指的是重定向回原始站点。整个页面的 html 太长而无法发布,但相关位似乎是:
<div style="padding: 8px;" id="logindiv">
<form method="POST" action="https://www.medicinescomplete.com/mc/athens">
Please wait while we transfer you. <br><noscript>JavaScript disabled, please<input type="submit" value="click here" style="border:none;background:none;text-decoration:underline;color:#E27B2F;">

我想知道以下位是否指的是某些登录 key :
<input type="hidden" name="TARGET" value="https://www.medicinescomplete.com/about/" style="display:none"><input type="hidden" name="RelayState" value="https://www.medicinescomplete.com/about/" style="display:none"><input type="hidden" name="SAMLResponse" value="PFJlc3BvbnNlIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiBEZXN...

啊哈!在页面下方是这样的:
<script>
window.onload = function() { document.forms[0].submit(); }
</script>

我认为该窗口是为了自动提交另一个表单,该表单将执行发布到原始medicinescomplete.com 站点以使用隐藏字段作为登录凭据进行身份验证。但是,在尝试使用此页面上的 submit_form() 时,我似乎没有进一步的了解!我添加了以下行来尝试弄清楚发生了什么:
> submit_form(mcsession, athensform) %>% html_form() %>% str()

这给出了以下输出:
Submitting with 'submit'
List of 1
$ :List of 5
..$ name : chr "<unnamed>"
..$ method : chr "POST"
..$ url : chr "https://www.medicinescomplete.com/mc/athens"
..$ enctype: chr "form"
..$ fields :List of 4
.. ..$ NULL :List of 7
.. .. ..$ name : NULL
.. .. ..$ type : chr "submit"
.. .. ..$ value : chr "click here"
.. .. ..$ checked : NULL
.. .. ..$ disabled: NULL
.. .. ..$ readonly: NULL
.. .. ..$ required: logi FALSE
.. .. ..- attr(*, "class")= chr "input"
.. ..$ TARGET :List of 7
.. .. ..$ name : chr "TARGET"
.. .. ..$ type : chr "hidden"
.. .. ..$ value : chr "https://www.medicinescomplete.com/about/"
.. .. ..$ checked : NULL
.. .. ..$ disabled: NULL
.. .. ..$ readonly: NULL
.. .. ..$ required: logi FALSE
.. .. ..- attr(*, "class")= chr "input"
.. ..$ RelayState :List of 7
.. .. ..$ name : chr "RelayState"
.. .. ..$ type : chr "hidden"
.. .. ..$ value : chr "https://www.medicinescomplete.com/about/"
.. .. ..$ checked : NULL
.. .. ..$ disabled: NULL
.. .. ..$ readonly: NULL
.. .. ..$ required: logi FALSE
.. .. ..- attr(*, "class")= chr "input"
.. ..$ SAMLResponse:List of 7
.. .. ..$ name : chr "SAMLResponse"
.. .. ..$ type : chr "hidden"
.. .. ..$ value : chr "PFJlc3BvbnNlIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA"| __truncated__
.. .. ..$ checked : NULL
.. .. ..$ disabled: NULL
.. .. ..$ readonly: NULL
.. .. ..$ required: logi FALSE
.. .. ..- attr(*, "class")= chr "input"
.. ..- attr(*, "class")= chr "fields"
..- attr(*, "class")= chr "form"

我觉得这个表格中的信息应该能让我登录到原来的网站,但我不太明白怎么做!不幸的是,当我再次使用此表单尝试 submit_form() 函数时,它似乎不起作用。我试过这个:
submit_form(mcsession, athensform) %>% html_form() %>% submit_form(mcsession, .) %>% html()

得到了这个:
Submitting with 'submit'
Submitting with ''
Error in if (!(submit %in% names(submits))) { :
argument is of length zero

最佳答案

它很可能与 this issue 有关这可以防止 httr发出正确的 GET重定向查询。

但是有点难以猜测,因为您缺少可重现的示例或查询的完整详细输出。

解决方法是通过以下方式阻止重定向:

rvest::submit_form(...,
httr::config(followlocation = FALSE))

关于r - 在 R 中使用 rvest 跟踪页面重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29390128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com