【问题标题】:Submit form with no submit button in rvest在 rvest 中提交没有提交按钮的表单
【发布时间】:2016-02-26 10:05:16
【问题描述】:

我正在尝试编写一个爬虫来下载一些信息,类似于this Stack Overflow post. 答案对于创建填写的表单很有用,但是我正在努力寻找一种方法来在提交按钮时提交表单不是表格的一部分。这是一个例子:

session <- html_session("www.chase.com")
form <- html_form(session)[[3]]

filledform <- set_values(form, `user_name` = user_name, `usr_password` = usr_password)
session <- submit_form(session, filledform)

此时,我收到此错误:

Error in names(submits)[[1]] : subscript out of bounds

我怎样才能让这个表单提交?

【问题讨论】:

  • 我也想知道怎么做。

标签: r web-crawler rvest


【解决方案1】:

这是一个对我有用的肮脏技巧:在研究了 submit_form source code 之后,我认为我可以通过在表单的代码版本中注入一个虚假的提交按钮来解决这个问题,然后 submit_form 函数会叫那个。它可以工作,只是它会给出一个警告,通常会列出一个不合适的输入对象(但在下面的示例中没有)。然而,尽管有警告,代码对我有用:

session <- html_session("www.chase.com")
form <- html_form(session)[[3]]

# Form on home page has no submit button,
# so inject a fake submit button or else rvest cannot submit it.
# When I do this, rvest gives a warning "Submitting with '___'", where "___" is
# often an irrelevant field item.
# This warning might be an rvest (version 0.3.2) bug, but the code works.
fake_submit_button <- list(name = NULL,
                           type = "submit",
                           value = NULL,
                           checked = NULL,
                           disabled = NULL,
                           readonly = NULL,
                           required = FALSE)
attr(fake_submit_button, "class") <- "input"
form[["fields"]][["submit"]] <- fake_submit_button

user_name <- "user"
usr_password <- "password"

filledform <- set_values(form, `user_name` = user_name, `usr_password` = usr_password)
session <- submit_form(session, filledform)

成功的结果显示以下警告,我直接忽略:

> Submitting with 'submit'

【讨论】:

  • 聪明的解决方案。我很想知道警告是否确实是一个错误,或者它是否是预期的行为。
  • 我在最新版本中没有看到此警告
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2016-04-22
  • 1970-01-01
相关资源
最近更新 更多