我已成功运行此代码一段时间了:
pgsession <- html_session("https://example.com")
pgform <- html_form(pgsession)[[1]]
filledForm <- set_values(pgform, "userid" = "usr", "password" = "pwd")
submit_form(pgsession, filledForm)
x <-jump_to(pgsession, url)
然而,它刚刚破产;看起来页面已更新?无论如何,我得到“ 错误:当前页面似乎不是html ”。
我在code for html_session() on github中搜索过,我认为问题是缺少Content-Type标题。
我尝试手动添加标题:
if(is.null(pgsession$response$headers$`Content-Type`)) {
pgsession$response$headers$`Content-Type` <- "text/html; charset=utf-8"
}
但它不起作用。可能是首先更新响应头的错误方法,但我想不出其他任何事情要做。
有人可以帮忙吗?感谢。
更新
嗯,根据下面的反馈,我尝试将httr::content_type("text/html")
添加到html_session()
调用,但它似乎没有向标题添加任何内容。我也看得更近了,看到了一个<nav>
元素。所以我现在看到页面是HTML 5.然后我通过在线HTML验证器运行它。有错误,但它们似乎很小。
rvest不支持HTML 5吗?我有v0.3.2,这似乎是最新的。我应该直接切换到使用httr吗?我需要登录并导航,所以rvest看起来非常方便。
答案 0 :(得分:0)
经过更多的研究和实验,我发现问题确实是rvest的html_form()
在内部检查Content-Type标头,以便将hmtl_session
中的HTML声明为有效。这当然不适用于使用<meta>
标记的HTML 5。
结论:在修复此问题之前,html_form()不支持没有Content-Type标头的HTML 5。
我向rvest here报告了这个问题,其中还包含一个解决方法。