RSelenium输入搜索词问题:CSS选择器无法定位搜索框
解决RSelenium无法定位CEC银行搜索框的问题
核心问题分析
你使用的ID #edit-localitate--_jjPr3WukFY 是动态生成的(带有随机后缀),页面每次刷新后这个ID都会变化,因此固定ID定位必然失效。另外,固定时长的Sys.sleep(5)无法保证元素完全加载,建议用显式等待替代。
可行解决方案
1. 改用稳定的元素选择器
放弃动态ID,使用以下稳定的定位规则:
- CSS选择器(基于name属性):
input[name='localitate'] - XPath(基于占位符或name属性):
//input[@placeholder='Localitate' or @name='localitate']
2. 用显式等待替代固定休眠
显式等待会等待元素可交互后再执行操作,比固定休眠更可靠,能避免因页面加载速度差异导致的定位失败。
修改后的代码示例
link_to_page <- "https://www.cec.ro/sucursale" library(RSelenium) # 启动驱动 rD <- rsDriver(browser = "firefox", port = 483L, verbose = F) remDr <- rD[["client"]] # 导航至目标页面 remDr$navigate(link_to_page) # 显式等待搜索框加载完成(最长等待10秒) search_box <- remDr$waitForElement(using = "css", "input[name='localitate']", timeout = 10000) # 输入搜索关键词 search_box$sendKeysToElement(list("București")) # 定位并点击搜索按钮(使用稳定的CSS选择器) search_button <- remDr$findElement(using = "css", "button#edit-submit-sucursale") search_button$clickElement() # 关闭驱动 remDr$close() rD$server$stop()
额外提示
- 若仍定位失败,可检查元素是否处于shadow DOM中(该页面搜索框不在shadow DOM内)
- 可通过浏览器开发者工具(F12)的「复制」功能,直接复制稳定的CSS选择器或XPath,避免手动编写错误
内容的提问来源于stack exchange,提问作者zoowalk
相关产品推荐
相关产品推荐

