Install and load

install.packages("RSelenium")

library(RSelenium)
library(rvest)
library(dplyr)

Start a Selenium server and browser

rD <- rsDriver(browser = "chrome", port = 4567L, verbose = FALSE)
remDr <- rD$client

Go to FDIC exam schedule page

url <- "https://www.fdic.gov/resources/bankers/exam-schedule/index.html"
remDr$navigate(url)

Sys.sleep(3) # wait for JS to load

Empty list to hold all rows

all_data <- list()

repeat {
# Get current page source and parse with rvest
page_source <- remDr$getPageSource()[[1]]
page_html <- read_html(page_source)

# Grab the table
tbl <- page_html %>% html_element("table") %>% html_table(fill = TRUE)
all_data <- append(all_data, list(tbl))

# Try clicking "next" if available and not disabled
next_btn <- remDr$findElements(using = 'css selector', value = '.paginate_button.next')

if (length(next_btn) == 0) break # No next button
disabled <- next_btn[[1]]$getElementAttribute("class")[[1]] %>% grepl("disabled", .)
if (disabled) break # Button is disabled, end of pages

next_btn[[1]]$clickElement()
Sys.sleep(2)
}

Combine all into one data frame

df_all <- bind_rows(all_data)

Save to CSV

write.csv(df_all, "fdic_exam_schedule_q2_2025_all_pages.csv", row.names = FALSE)

Stop the browser

remDr$close()
rD$server$stop()