You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RSelenium爬取unicancer.sigaps.fr时无法通过xpath定位元素怎么办

问题成因
  • 页面未完成加载就执行元素查找。你调用remDr$navigate()后没有等待页面DOM渲染完成,直接执行查找元素的逻辑,此时目标元素还没被加载到页面中,自然无法定位。
  • 元素定位器选择不合理。你使用的绝对XPath路径稳定性极差,页面结构稍有变动就会失效;另外你自己查到的用户名输入框name属性为login,完全可以用更稳定的name定位器替代绝对XPath。
  • Selenium自动化特征被网站反爬策略识别。部分网站会检测访问环境是否为自动化工具,若识别到是Selenium控制的浏览器,会返回空页面或者篡改DOM结构,导致你无法定位到正常元素。
  • 版本兼容性问题。你使用的Selenium是4.0.0-alpha-2测试版本,本身存在较多未修复的bug,和Chrome 96版本的兼容性也可能存在问题。
解决方法

1. 添加显性等待逻辑

在跳转到目标页面后、查找元素前,优先使用显性等待(等待指定元素出现后再执行后续操作),稳定性高于固定时长的强制等待。

2. 替换为更稳定的元素定位器

用户名输入框直接用name="login"定位,不要使用极易失效的绝对XPath。

3. 添加Chrome启动参数屏蔽自动化特征

启动Chrome时添加参数隐藏Selenium的自动化标识,绕过网站的反爬检测。

4. 可选:升级Selenium到稳定正式版

你当前使用的alpha测试版本身不稳定,可升级到和Chrome 96适配的稳定版本,减少兼容性问题。

修复后的完整代码
# 启动Chrome时添加反检测参数
eCaps <- list(chromeOptions = list(
  args = c('--disable-blink-features=AutomationControlled', '--start-maximized')
))

rD <- rsDriver(browser= "chrome", port = 3955L, chromever = "96.0.4664.45", extraCapabilities = eCaps)
remDr <- rD[["client"]]
 
remDr$navigate("https://unicancer.sigaps.fr/")

# 显性等待最多10秒,直到用户名输入框出现
webElem <- remDr$waitFor(using = "name", value = "login", timeout = 10000)
if (is.null(webElem)) {
  stop("页面加载超时,未找到用户名输入框")
}

username <- "xyz"
password <- "lol93"

# 用name定位用户名和密码输入框
remDr$findElement(using = "name", value = "login")$sendKeysToElement(list(username))
remDr$findElement(using = "name", value = "mdp")$sendKeysToElement(list(password))
 
rD$server$stop()
remDr$close()
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)

内容的提问来源于stack exchange,提问作者bouftonmouth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:24:02