使用RSelenium+rvest爬取页面时遇会话错误及翻页异常求助
问题解决方案
1. 解决"No active session with ID"等NoSuchDriver错误
- 确认
geckodriver版本与Firefox 118.0.2完全匹配,下载对应版本驱动 - Windows系统下,将
geckodriver.exe放到系统PATH目录(如C:\Windows\System32),或启动RSelenium时指定驱动路径:
library(RSelenium) driver <- rsDriver( browser = "firefox", extraCapabilities = list( "moz:firefoxOptions" = list( binary = "C:\\Program Files\\Mozilla Firefox\\firefox.exe" # 替换为你的Firefox安装路径 ) ), port = 4567L # 指定固定端口避免冲突 )
- 加入异常捕获,防止session意外中断:
tryCatch({ remDr <- driver[["client"]] remDr$navigate("https://igop.uab.cat/category/publicacions/") }, error = function(e) { driver$server$stop() driver <- rsDriver(browser = "firefox") remDr <- driver[["client"]] })
2. 解决无法打开Firefox的UnknownError及httr调用错误
- 关闭Firefox自动更新:打开Firefox→设置→常规→Firefox更新,选择“检查更新但让我选择是否安装”
- 检查防火墙/杀毒软件是否拦截
geckodriver.exe,暂时关闭防护测试 - 更新相关依赖包:
install.packages(c("RSelenium", "httr", "rvest"))
- 尝试无头模式启动Firefox:
driver <- rsDriver( browser = "firefox", extraCapabilities = list( "moz:firefoxOptions" = list( args = list("--headless") ) ) )
3. 解决无法翻到第三页、重复读取前两页的问题
页面采用AJAX加载,URL无变化,需用RSelenium模拟点击下一页按钮:
library(rvest) remDr <- driver[["client"]] all_links <- c() while(TRUE) { # 解析当前页面的Read More链接 page_source <- remDr$getPageSource()[[1]] page <- read_html(page_source) links <- page %>% html_elements("a:contains('Read More')") %>% html_attr("href") all_links <- c(all_links, links) # 查找下一页按钮 next_btn <- tryCatch( remDr$findElement(using = "css selector", value = "a.next.page-numbers"), error = function(e) NULL ) if(is.null(next_btn)) break # 无下一页则退出循环 # 点击下一页并等待加载 next_btn$clickElement() Sys.sleep(2) # 可根据网络调整等待时长 } # 去重后输出结果 all_links <- unique(all_links) print(all_links)
内容的提问来源于stack exchange,提问作者marcbosch
相关产品推荐
相关产品推荐

