使用rvest提交表单后如何在同一会话中继续导航?
使用rvest同一会话完成表单提交与后续导航
核心问题在于你没有保留初始的会话(session)对象。html_form_submit() 执行时会更新原session的状态,但如果是链式调用直接覆盖变量,你拿到的会是提交后的response而非session。要维持会话上下文(比如登录状态),需要先单独创建并存储session,再基于它完成后续操作。
修正后的代码示例
# 1. 初始化并保留会话对象 session <- rvest::session("https://www.google.com/") # 2. 定义搜索参数 search_parameters <- list('q' = 'dogs') # 3. 基于已有会话提交表单,更新会话状态 session <- session |> rvest::html_form() |> purrr::pluck(1) |> rvest::html_form_set(!!!search_parameters) |> rvest::html_form_submit() #> Submitting with 'btnG' # 4. 使用同一会话跳转第一个搜索结果链接 result_page <- session |> rvest::session_follow_link(1) # 验证跳转状态 result_page$status_code #> [1] 200
关键说明
- 先单独创建
session变量,后续所有操作都基于这个变量,确保会话上下文(如Cookie、登录状态)被持续保留。 html_form_submit()执行后,原session会被更新为提交请求后的状态,将结果重新赋值给session即可拿到最新的会话对象。- 之后调用
session_follow_link()时传入这个更新后的session,就能在同一会话中完成导航,不会丢失之前的状态(比如登录信息)。
内容的提问来源于stack exchange,提问作者joshbrows
相关产品推荐
相关产品推荐

