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

使用R的read_html_live与Selenider点击元素失败,无法抓取店铺URL

店铺URL抓取点击失效问题排查

我的目标是抓取页面 https://obchody.heureka.sk/?f=1 里的在线店铺基础URL,但该页面由JavaScript渲染,店铺URL未直接显示,需要点击店铺logo或名称跳转后提取。我用Rvest的read_html_live()和Selenider的elem_click()尝试点击均未生效,预期点击后跳转至店铺主页但无反应。

Rvest 尝试代码

url <- "https://obchody.heureka.sk/?f=1"
page <- read_html_live(url)
page$click(".c-shops-table__cell--name a", n_clicks = 1)

Selenider 尝试代码

selenider_session()
selenider::open_url(url)
s(".c-shops-table__cell--name a") %>% elem_click(js = TRUE, timeout = NULL)

可能的失效原因及解决思路

  • 元素定位不准确:先验证选择器有效性。在浏览器开发者工具控制台执行document.querySelectorAll(".c-shops-table__cell--name a"),检查返回的元素是否为空,或是实际可点击的目标(比如部分页面会在元素上层加遮罩,跳转事件绑定在其他元素上)。
  • 页面未完全加载:JavaScript渲染页面需要等待元素加载完成再操作:
    • Rvest可添加等待逻辑:page$wait_for(".c-shops-table__cell--name a"),确保元素出现后再执行点击。
    • Selenider可使用wait_until(elem_exists(s(".c-shops-table__cell--name a")))等待元素加载完毕。
  • 点击方式不匹配:部分页面的点击事件需要模拟真实用户操作,而非JS触发:
    • Selenider去掉js = TRUE参数,用原生浏览器点击:s(".c-shops-table__cell--name a") %>% elem_click(timeout = NULL)。
    • Rvest的click()若匹配多个元素,需指定具体位置(如n = 1)确保点击目标正确。
  • 反爬机制拦截:目标网站可能识别出自动化操作,可尝试添加自定义用户代理(UA),或模拟真实浏览行为(如滚动页面、随机等待后再点击)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:45:05