1. Functions

library(curlR)
library(purrr)
library(Ipaper)
print(Sys.time())

login <- function() {
  ele_find_first("//button[@class='el-button login-btn el-button--primary']") %>%
    ele_click()
}

# 播放与暂停
video_play <- function() {
  querySelector(".video") %>% ele_click()
}

speed_2x <- function(val = c("2", "1.5", "1.25", "1", "0.5")) {
  val <- match.arg(val)
  css_speed <- glue('li[data-speed="{val}"]')

  show_list <- function() {
    querySelector(".xt_video_player_common_value") %>% ele_click()
  }

  show_list()
  querySelector(css_speed) %>%
    move_to_element(5, 5) %>%
    ele_click()
  show_list() # close
}

video_status2 <- function() {
  # video <- querySelector(".xt_video_player")
  video <- querySelector(".xt_video_player")
  video_status(video)
}

play_next <- function() {
  querySelector(".btn-next > span") %>%
    # move_to_element() %>%
    ele_click()
}

2. Main scripts

port <- 4445
kill_selenium(port)
p <- init_selenium(port, browserName = "chrome")
# p$closeall()
# kill_selenium(port)

p$navigate("https://cugyjscfd.yuketang.cn")
f_cookie = "./cookie_yuketang.txt"
# login()
# cookie_save(f_cookie)
cookie_load(f_cookie)
# cookie works now
urls <- c(
  # "https://cugyjscfd.yuketang.cn/pro/lms/1380SJEKfaeP/9578373/studycontent", # 大学的初心
  "https://cugyjscfd.yuketang.cn/pro/lms/1134HJLr6gju/9578424/score" # 谈话的艺术
)
url <- urls[1]
# do_listen <- function(url)
p$navigate(url)

2.1. 实战

xs <- querySelectorAll(".cursorpoint.unit-name-hover")
xs_prop <- querySelectorAll(".complete-td > span:nth-of-type(1)") %>% ele_text()

portion <- gsub("%", "", xs_prop) %>% as.numeric()
inds <- map_lgl(xs_prop, ~ .x != "已完成") %>% which()
foreach(i = inds, icount(1)) %do% {
  runningId(i)
  x <- xs[[i]]
  ele_click(x)

  focus_last_window()
  speed_2x("1.5")
  video_play()

  info = video_status()
  while (info$perc < 95) {
    info = video_status()
    Sys.sleep(1) # second
  }
  # else to the next lesson
  # play_next()
  p$closeWindow()
  Sys.sleep(10)
}

2.2. debug model

i <- inds[1]
ele_click(xs[[i]])
focus_last_window()

speed_2x("1.5")
video_play()

info <- video_status()
while (info$perc < 95) {
  info <- video_status()
  Sys.sleep(1) # second
}
# else to the next lesson
# play_next()
p$closeWindow()
Sys.sleep(10)

3. References

  1. https://github.com/EricZhang615/AutoYuketang/blob/master/yuketang.py


rpkgs/curlR documentation built on Jan. 30, 2023, 7:26 p.m.