如何在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
相关产品推荐
相关产品推荐

