You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RSelenium中选择下拉框选项?(欧盟网站爬虫场景)

解决方案

  • 第一步:添加显式等待逻辑,动态页面的下拉选项不会在点击下拉框后立刻渲染完成,你需要等目标选项加载完成后再执行点击操作,避免定位到不存在的元素。
  • 第二步:使用正确的元素定位方式,该网站的下拉框为自定义Div组件,不是原生<select>标签,不能用普通的select类方法操作,需要直接定位对应选项元素。
  • 第三步:如果直接点击仍不生效,可以调用浏览器执行JS的方法直接触发选项选中,绕过前端交互的事件监听限制。

修改后的参考代码

remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4445L, extraCapabilities = fprof )
remDr$open()

remDr$navigate("https://webgate.ec.europa.eu/competition/transparency/public?lang=en")
# 等待搜索页基础元素加载
Sys.sleep(2) 
morereviews <- remDr$findElements(using = "css", "#selectAll") 
morereviews[[1]]$clickElement()
morereviews <- remDr$findElements(using = "css", ".button-search")  
morereviews[[1]]$clickElement()
# 等待结果页加载完成
remDr$waitFor(condition = "return document.readyState === 'complete'", timeout = 10000)
morereviews <- remDr$findElements(using = "css", "#currency-EUR")  
morereviews[[1]]$clickElement()

# -----新增下拉选项选择逻辑-----
# 1. 点击目标下拉框,此处#aid-type-select请替换为你实际操作的下拉触发按钮的CSS选择器,可通过F12元素检查获取
aid_dropdown <- remDr$findElement(using = "css", "#aid-type-select") 
aid_dropdown$clickElement()
# 2. 等待下拉选项渲染完成
remDr$waitFor(condition = "return document.querySelectorAll('.dropdown-item').length > 0", timeout = 5000)

# 定义需要选中的三个目标选项
target_options <- c("Regional Aid Scheme", "SMEs", "Aid for Start ups")

for(opt in target_options){
  # 按文本匹配对应选项
  option_xpath <- paste0("//*[contains(@class,'dropdown-item') and normalize-space(text())='", opt, "']")
  target_opt <- remDr$findElement(using = "xpath", option_xpath)
  # 直接点击失效时用JS触发点击,兼容性更强
  remDr$executeScript("arguments[0].click();", list(target_opt))
  Sys.sleep(0.5)
}

remDr$screenshot(display = TRUE)

注意:如果目标下拉为多选框,循环点击即可正常选中多个选项,若为单选框需调整对应逻辑。

内容的提问来源于stack exchange,提问作者noobie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:48:05