RSelenium模拟点击Moves标签无响应如何解决?能否用rvest实现?
解决方案
一、RSelenium模拟点击切换Moves标签的实现方法
点击无反应通常由三个原因导致:元素未完全加载、元素被遮挡、原生点击事件未被页面监听器捕获,按以下步骤可解决:
- 先添加显式等待,确保页面加载完成后再操作,避免找到无效空元素
- 优先使用JS执行点击,兼容性远高于RSelenium原生点击方法,不会受页面元素层级遮挡影响
示例代码:
library(RSelenium) url <- "https://play.xiangqi.com/game/oX00ly" rD <- RSelenium::rsDriver(browser = "firefox", check = F) remDr <- rD$client remDr$navigate(url = url) # 等待Moves标签元素加载完成,超时时间10秒 remDr$waitFor(selector = "#moves-tab", timeout = 10000) webElem <- remDr$findElement("css selector", "#moves-tab") # 用JS执行点击,替代原生点击方法 remDr$executeScript("arguments[0].click();", list(webElem)) # 等待走棋列表容器加载完成后再提取数据 remDr$waitFor(selector = ".Wrapper__MovesTabWrapper-sc-13rqht3-2", timeout = 10000) webElem <- remDr$findElement("css selector", ".Wrapper__MovesTabWrapper-sc-13rqht3-2") moves_text <- webElem$getElementText()[[1]]
二、关于是否可以使用rvest实现该需求
可以实现,无需使用RSelenium这类模拟浏览器工具:
该网站的对局走棋数据属于初始页面加载时就嵌入到页面静态资源的内容,存储在页面的<script>标签的全局状态变量中,你可以直接用rvest抓取页面源码,提取对应JSON字段解析即可拿到走棋列表,效率远高于模拟浏览器操作。
内容的提问来源于stack exchange,提问作者Donald Seinen
相关产品推荐
相关产品推荐

