RSelenium 将 运行 当 运行 单独地每一行而不是 运行 在代码块中

RSelenium will run when running each line individually but not when running in code chunks

我正在尝试学习 RSelenium 包,以便我可以自动从网页中提取数据。当我这样做时,我遇到了一个奇怪的错误。

 "no such element: Unable to locate element: {\"method\":\"css selector\",\"selector\":\"[name='rankings_table_length']\"}
(Session info: chrome=87.0.4280.88)

奇怪的是,当我单独 运行 每一行时,我能够 运行 脚本非常好,但是当我尝试 运行 中的行时块或循环 rselenium 无法找到元素。通过检查我知道我的元素是正确的。有更多 RSelenium 经验的人知道为什么代码在 运行 单独地而不是块中的每一行时可以工作吗?

下面的完整代码可重现性:

conn <- rsDriver(browser = "chrome",
                 port = 950L,
                 chromever = "87.0.4280.88")

chooseStat <- c("Total Offense", 
  "Total Defense", 
  "3rd Down Conversion Pct"
  )

year <- "2020"

conn$client$open()

conn$client$navigate("https://stats.ncaa.org/")

sportInput <- conn$client$findElement(using = "css", "[name = 'sport']")
sportInput$clickElement()
sportInput$sendKeysToElement(list("football", key = "enter"))

yearInput <- conn$client$findElement(using = "css", "[name = 'acadyr']")
yearInput$clickElement()
yearInput$sendKeysToElement(list(year, key = "enter"))

divInput <- conn$client$findElement(using = "css", "[name = 'u_div']")
divInput$clickElement()
divInput$sendKeysToElement(list("FBS", key = "enter"))

selectTeam <- conn$client$findElement(using = "css", "[id = 'stat_type_T_N']")
selectTeam$clickElement()

statInput <- conn$client$findElement(using = "css",
                                     "[id = 'Stats']")
statInput$clickElement()
statInput$sendKeysToElement(list(chooseStat[1], key = "enter"))

lenInput <- conn$client$findElement(using = "css selector",
                                "[name='rankings_table_length']")

lenInput$clickElement()
lenInput$sendKeysToElement(list("130", key = "enter"))



tbl <- conn$client$getPageSource()[[1]] %>% 
  readHTMLTable()

stat_tbl <- tbl$rankings_table

assign(str_replace_all(chooseStat[1], " ", "_"), stat_tbl)

这段代码是出现错误的地方:

lenInput <- conn$client$findElement(using = "css selector",
                                "[name='rankings_table_length']")

这是因为此 CSS 选择器表示在其他 selenium 调用在该页面上操作之前未加载到网页上(因此无法操作)的元素的路径。这里真正的问题是网页反映这些操作(并加载该特定元素)所花费的时间。

我建议在整个代码中插入 sys.sleep(2) 函数调用,以便在尝试对元素进行操作之前加载这些元素。这应该使您能够 运行 您的代码作为一个块,而不是逐行。让我知道你过得怎么样。