Code
if (param.UseScraper) {
### Login to SEMS using default credentials
semsLogin <- function(manual = F) {
# Opening SEMS homepage
open_url("https://www.semsportal.com/home/login")
# Pass e-mail
session |>
find_element(css = "#username.require") |>
elem_click() |>
elem_send_keys(config$login)
# Pass password
session |>
find_element(css = "#password" ) |>
elem_click() |>
elem_send_keys(config$password)
# Accept SEMS policy
session %>%
find_element(css = "#readStatement") %>%
elem_click()
# Click login button
if (!manual) {
session %>%
find_element(css = "#btnLogin") %>%
elem_click()
}
}
### Download report of the day with a frequency of a minute
semsDailyReport <- function(reportDate) {
retry <- function(expr, retries = 5, wait = 5, handlePopup = TRUE) {
attempt <- 1
while (attempt <= retries) {
result <- tryCatch(
expr,
error = function(e) {
message(sprintf("Error: %s. Retrying (%d/%d)...", e$message, attempt, retries))
if (handlePopup) {
tryCatch(
session %>%
find_element(css = ".gdw-message-box-button-group.gmbbg-up-line.button") %>%
elem_click(),
error = function(e) {
message("No blocking popup found.")
}
)
}
return(NULL)
}
)
if (!is.null(result)) {
return(result)
}
Sys.sleep(wait)
attempt <- attempt + 1
}
stop("Maximum retry attempts reached")
}
retry({
session %>%
find_element(css = ".history_data") %>%
elem_click()
})
iDate <- Sys.Date() |> as.POSIXct()
newStart <- NULL
newEnd <- NULL
while (iDate >= reportDate[1]) {
print(c(iDate, reportDate[1]))
newStart <- format(
iDate - as.difftime(1, units = 'days'),
"%d/%m/%y %H:%M:%S"
) |> as.character()
newEnd <- format(
iDate,
"%d/%m/%y %H:%M:%S"
) |> as.character()
retry({
session %>%
find_element(css = ".el-range-input[placeholder='From']" ) %>%
elem_click() %>%
elem_set_value(newStart)
})
retry({
session %>%
find_element(css = ".el-range-input[placeholder='To']" ) %>%
elem_click() %>%
elem_set_value(newEnd)
})
iDate <- iDate - as.difftime(1, units = "days")
}
retry({
session %>%
find_element(css = ".el-button.el-picker-panel__link-btn.el-button--default.el-button--mini.is-plain") %>%
elem_click()
})
Sys.sleep(7)
retry({
session %>%
find_element(css = ".el-collapse-item__header") %>%
elem_click()
})
retry({
session %>%
find_element(xpath = '//*[@id="55000DTS225W0789"]') %>%
elem_click()
})
Sys.sleep(2)
retry({
session %>%
find_element(css = ".his_btn_all.btn-nor") %>%
elem_click()
})
retry({
session %>%
find_element(xpath = '//*[@id="app"]/div[1]/div[4]/div/div[3]/div/div[4]/button[2]') %>%
elem_click()
})
Sys.sleep(7)
retry({
session %>%
find_element(css = ".btn-nor.p_btn_export") %>%
elem_click()
})
Sys.sleep(7)
}
dateRange <- function(start, end) {
x <- (as.Date(c(start, end), format = "%Y.%m.%d") - Sys.Date()) |>
as.numeric() |> abs() |> unique()
x[1]:x[2]
}
}