使用RSelenium爬取FantasyLabs NFL DFS表格报错求助
问题:RSelenium爬取fantasylabs表格时readHTMLTable报错
我尝试用RSelenium爬取fantasylabs.com上的NFL历史DFS选手中标率数据,已经能导航到目标页面并高亮目标表格元素,但转成表格时出现报错:
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘readHTMLTable’ for signature ‘"webElement"’
我查过报错信息但没找到原因,是参照Stack Overflow的示例来写的代码,想知道报错原因和解决方法。
我的完整代码如下:
library(RSelenium) library(XML) library(RCurl) # 启动Selenium服务器 rdriver <- rsDriver(browser = "chrome", chromever = "106.0.5249.61", ) # 创建客户端对象并打开浏览器 obj <- rdriver$client # 导航到目标URL appURL <- 'https://www.fantasylabs.com/nfl/contest-ownership/?date=10112022' obj$navigate(appURL) obj$findElement(using = 'xpath', '//*[@id="ownershipGrid"]')$highlightElement() tableElem <- obj$findElement(using = 'xpath', '//*[@id="ownershipGrid"]') projTable <- readHTMLTable(tableElem, header = TRUE, tableElem$getElementAttribute("outerHTML")[[1]]) dvpCTable <- projTable[[1]] dvpCTable
报错原因与解决方法
报错原因
readHTMLTable函数不接受RSelenium的webElement对象作为参数——它只认HTML字符串、XML节点或者URL。你代码里把tableElem(webElement实例)直接传给了这个函数,这就导致了方法签名不匹配的错误。
解决方法
你已经正确获取了表格的outerHTML字符串,只需要把这个字符串传给readHTMLTable就行,不需要同时传入webElement。修改代码中解析表格的部分:
修正后的核心代码
# 提取表格的HTML源码字符串 table_html <- tableElem$getElementAttribute("outerHTML")[[1]] # 用HTML字符串解析成表格 projTable <- readHTMLTable(table_html, header = TRUE) dvpCTable <- projTable[[1]] dvpCTable
其他可选方案
- 换用rvest包处理表格:rvest的
html_table函数对HTML表格的兼容性更好,代码也更简洁:library(rvest) # 先获取表格HTML字符串 table_html <- tableElem$getElementAttribute("outerHTML")[[1]] # 解析成数据框 dvpCTable <- read_html(table_html) %>% html_table(header = TRUE) %>% .[[1]] - 手动提取单元格数据:如果表格是高度动态渲染的,也可以通过Selenium遍历表格的行和单元格,逐个提取内容后构建数据框,但这种方法代码量较大,适合特殊场景。
内容的提问来源于stack exchange,提问作者CooperBuckeye05
相关产品推荐
相关产品推荐

