如何用RSelenium点击页面列表中第二个元素Consulta por Cuenta Contrato?
解决方案:用RSelenium实现目标元素点击
当然可以用RSelenium实现这个点击操作,你的代码主要有两个问题导致失效:
1. RSelenium初始化逻辑错误
你先用rsDriver()创建了驱动实例,随后又重新用remoteDriver()赋值覆盖了remDr,这会导致之前的驱动连接被断开,正确的做法是直接使用rsDriver()返回的client对象。
2. 元素定位方式不可靠
mat-radio-3这类Angular生成的ID是动态的,刷新页面后可能会变化,改用基于元素文本或稳定属性的定位方式更可靠。
修正后的完整代码
library(RSelenium) library(wdman) # 初始化RSelenium驱动 driver <- rsDriver(port = 4445L, browser = "firefox") remDr <- driver$client # 打开浏览器并导航到目标页面 remDr$open() remDr$navigate("https://nodejs.eeq.com.ec/consultafacturas/proceso/formulario-ingreso") # 等待页面加载(建议用显式等待替代Sys.sleep,更稳定) Sys.sleep(3) # 通过元素文本定位目标单选框 webElem <- remDr$findElement(using = "xpath", "//label[contains(text(), 'Consulta por Cuenta Contrato')]/preceding-sibling::input[@type='radio']") # 执行点击操作 webElem$clickElement() # 后续操作完成后关闭驱动(按需启用) # remDr$close() # driver$server$stop()
额外优化建议
- 尽量用显式等待替代
Sys.sleep(),避免因页面加载速度慢导致的失败:
# 等待元素出现并可点击,超时时间10秒 remDr$waitForElement(using = "xpath", "//label[contains(text(), 'Consulta por Cuenta Contrato')]/preceding-sibling::input[@type='radio']", timeout = 10000)
内容的提问来源于stack exchange,提问作者user007
相关产品推荐
相关产品推荐

