You need to enable JavaScript to run this app. 使用Apify Webscraper抓取LinkedIn视频时长无返回值的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Apify Webscraper抓取LinkedIn视频时长无返回值的问题咨询

Apify Webscraper抓取LinkedIn视频时长返回空值排查

已确认的场景

  • 目标存储元素为类名vjs-duration-display的span标签,全局唯一,文本内容为视频时长(示例为1:00)
  • 现有代码可正常返回当前页面URL,仅时长字段持续返回空值

核心错误点

  • 取值API使用错误:现有代码通过$('span[class=vjs-duration-display]').text取值,混淆了jQuery封装对象和原生DOM对象的API差异。jQuery实例获取元素文本必须调用.text()方法,直接读取.text属性只会得到undefined,无法拿到实际存储的时长字符串。
  • 选择器匹配逻辑不严谨:现有代码使用span[class=vjs-duration-display]属性选择器,要求元素的class属性值与输入字符串完全一致才能命中。LinkedIn的VideoJS播放器组件会动态给容器追加附加类名,这种完全匹配的写法很容易因为类名值不纯粹而选择失效,提取单一类名的元素直接使用类选择器.vjs-duration-display即可,兼容类名附带其他参数的场景。
  • 动态元素加载时机不匹配:LinkedIn的视频时长元素是播放器初始化完成后才会插入DOM、填充时长值的,现有代码在页面刚触发加载完成事件时就立刻执行取值逻辑,此时播放器尚未完成初始化,目标元素可能还不存在,自然无法提取到内容。

修正后的可运行代码

async function pageFunction(context) {
    const { request, log, jQuery: $, waitFor } = context;
    if (request.userData.label === "PAGE"){
        log.info('LinkedIn page opened');
        // 等待目标时长元素渲染完成,超时时间设置为10秒
        await waitFor('span.vjs-duration-display', { timeout: 10000 });
    }
    return {
        url: context.request.url,
        // 正确调用jQuery的text()方法提取文本,去除多余空格
        duration: $('span.vjs-duration-display').text().trim(),
    };
}

补充注意事项

  • 如果抓取的页面包含多个视频播放器,上述选择器可能命中多个时长值,可通过定位对应视频的外层容器,再查找容器内的子元素完成提取,避免取到错误的时长数据。
  • 如果等待元素超时,可适当延长waitFor的超时时间,适配网络较差时的页面加载速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 04:54:05