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

如何用RSelenium抓取网页全部条目?求正确XPath/CSS定位路径

抓取Ecartico人物条目:RSelenium元素定位方案

需要抓取网页https://www.vondel.humanities.uva.nl/ecartico/persons/index.php?subtask=browse中的全部50个人物条目,现有RSelenium代码但元素定位逻辑有误,以下是可行的定位方案及修正后的完整代码。

可行的元素定位方案

XPath定位(推荐相对路径,稳定性更高)

  • 定位所有人物条目://ul[@class='itemlist']/li/a
    解释:直接定位到类名为itemlist的列表下所有<li>标签内的<a>元素,这是页面中人物条目的统一容器。
  • 定位单个条目(比如第N个)://ul[@class='itemlist']/li[N]/a(将N替换为数字,比如第一个就是li[1])

CSS选择器定位

  • 定位所有人物条目:ul.itemlist li a
  • 定位单个条目:ul.itemlist li:nth-child(N) a(N为条目序号)

修正后的完整R代码

rm(list=ls())
library(tidyverse)
library(robotstxt)
library(rvest)
library(RSelenium)
library(netstat)
library(wdman)

# 启动Selenium服务
remote_driver <- rsDriver(
  browser = "chrome",
  chromever = "113.0.5672.63",
  verbose = F,
  port = free_port()
)

# 创建客户端对象并打开浏览器
remDr <- remote_driver$client
remDr$open()
remDr$maxWindowSize()

# 导航到目标网页
remDr$navigate("https://www.vondel.humanities.uva.nl/ecartico/persons/index.php?subtask=browse")

# 定位所有人物条目元素
person_elements <- remDr$findElements(using = "xpath", "//ul[@class='itemlist']/li/a")

# 提取所有人物条目文本
person_list <- map_chr(person_elements, ~.x$getElementText()[[1]])

# 转换为数据框(可选,方便后续处理)
person_df <- tibble(name = person_list)

# 输出结果
print(person_df)

# 关闭浏览器和服务
remDr$close()
remote_driver$server$stop()

补充说明

  • 避免使用绝对XPath(比如原代码中的/html/body/div[2]/div/ul/li[1]/a),这类路径依赖页面DOM的层级结构,一旦页面布局调整就会失效,相对路径的容错性更强。
  • 若遇到加载延迟问题,可以添加Sys.sleep(2)等待页面完全加载后再执行元素定位。
  • 抓取完成后务必关闭浏览器和Selenium服务,避免资源占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:30:25