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

RSelenium抓取荷兰历史选举数据:无法获取whitebox内容及迭代需求

解决RSelenium抓取荷兰选举数据的问题

核心问题:无法提取whitebox内的选举结果

你当前的代码仅定位到whitebox元素,但未提取其中的内容;另外点击下拉选项后页面可能存在异步加载延迟,直接抓取会导致获取不到数据。可以按以下步骤修复:

1. 添加显式等待,确保元素加载完成

使用等待机制避免页面未渲染完成就抓取:

library(wdman)
library(RSelenium)
library(rvest)

rD <- rsDriver(browser="firefox", port=4545L, verbose=F)
remDr <- rD[["client"]]

url <- 'https://www.verkiezingsuitslagen.nl/verkiezingen/detail/TK19250701/663214'
remDr$navigate(url)

# 操作下拉菜单
dropdown1 <- remDr$findElement(using = 'id', value = "2")
dropdown1$clickElement()

dropdown2 <- remDr$findElement(using = 'id', value = "3")
dropdown2$clickElement()

option <- remDr$findElement(using = 'xpath', "/html/body/main/div/div/div[2]/div[1]/div/div[2]/div/select/option[2]")
option$clickElement()

# 最长等待10秒,直到whitebox元素出现
remDr$waitForElement(using = 'class name', value = "whitebox", timeout = 10000)

# 获取whitebox内部的HTML内容
results_element <- remDr$findElement(using = 'class name', value = "whitebox")
results_html <- results_element$getElementAttribute("innerHTML")[[1]]

# 用rvest解析HTML提取表格数据
results_table <- read_html(results_html) %>% html_table(fill = TRUE)
print(results_table)

2. 提取表格数据的替代方案

如果whitebox内是标准表格,可直接定位表格元素提取:

# 等待表格加载完成
remDr$waitForElement(using = 'css selector', value = ".whitebox table", timeout = 10000)
table_element <- remDr$findElement(using = 'css selector', value = ".whitebox table")
table_html <- table_element$getElementAttribute("innerHTML")[[1]]
results_table <- read_html(table_html) %>% html_table(fill = TRUE)

迭代处理每个Gemeente的方案

要遍历所有Gemeente,先获取所有选项列表,循环点击并抓取数据:

# 获取Gemeente下拉菜单的所有选项
gemeente_dropdown <- remDr$findElement(using = 'xpath', "/html/body/main/div/div/div[2]/div[1]/div/div[2]/div/select")
gemeente_options <- gemeente_dropdown$findChildElements(using = 'tag name', value = "option")

# 存储所有结果的列表
all_results <- list()

# 循环遍历每个选项
for (i in seq_along(gemeente_options)) {
  # 点击当前Gemeente选项
  gemeente_options[[i]]$clickElement()
  
  # 等待whitebox加载
  remDr$waitForElement(using = 'class name', value = "whitebox", timeout = 10000)
  
  # 抓取并解析数据
  results_element <- remDr$findElement(using = 'class name', value = "whitebox")
  results_html <- results_element$getElementAttribute("innerHTML")[[1]]
  results_table <- read_html(results_html) %>% html_table(fill = TRUE)
  
  # 获取当前Gemeente名称并存储结果
  gemeente_name <- gemeente_options[[i]]$getElementAttribute("text")[[1]]
  all_results[[gemeente_name]] <- results_table
  
  # 添加短暂延迟,避免请求过快
  Sys.sleep(1)
}

# 关闭浏览器驱动
remDr$close()
rD$server$stop()

注意事项

  • 确保安装依赖包:install.packages(c("RSelenium", "rvest", "wdman"))
  • 若页面加载缓慢,可延长timeout时间或增加Sys.sleep()的延迟时长
  • 若元素定位失败,需检查页面结构是否变化,更新XPath或CSS选择器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:12:43