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

Letterboxd爬虫评论展开异常:底部评论未完全展开如何解决?

问题分析与修复方案

你的核心问题是初始统计的展开按钮数量不完整,且点击后未等待页面状态稳定,导致底部未加载的评论始终处于折叠状态。

具体问题根源

  1. 一开始就统计所有a.reveal的数量,但此时底部评论可能还没滚动加载出来,这些评论里的展开按钮根本没被计入统计,循环自然不会处理它们。
  2. 点击展开按钮后直接递减计数,没有等待页面DOM更新,可能展开操作还没完成就进入下一次循环,导致部分展开操作失效。
  3. 底部的展开按钮可能在视口外,直接点击会触发无效操作。

修复后的代码

// 循环处理所有展开按钮,直到页面上没有剩余
while (true) {
  const revealLinks = firstPage.locator('a.reveal');
  const remaining = await revealLinks.count();
  if (remaining === 0) break;

  // 获取第一个展开按钮,滚动到它确保在视口内可点击
  const targetReveal = revealLinks.first();
  await targetReveal.scrollIntoViewIfNeeded();
  
  // 点击并等待该按钮消失,确保评论完全展开
  await Promise.all([
    targetReveal.click(),
    firstPage.waitForSelector('a.reveal', { state: 'detached', timeout: 5000 })
  ]);
}

// 等待所有评论元素加载完成
await firstPage.waitForSelector('.js-listitem .js-review .body-text', { state: 'visible' });

// 提取评论内容(简化了原有的p标签遍历逻辑,textContent已包含所有文本)
const pageOneReviews = await firstPage.locator('.js-listitem .js-review .body-text')
  .evaluateAll(els => els.map(el => el.textContent.trim()));

await context.close();
return { pageOneReviews };

关键优化说明

  • 动态统计按钮数量:每次循环都重新统计当前页面的展开按钮,确保新滚动加载出来的评论里的按钮也被处理。
  • 滚动到目标元素:用scrollIntoViewIfNeeded()保证按钮在视口内,避免因元素不可见导致点击失败。
  • 等待DOM更新:点击后等待该展开按钮从DOM中移除,确保评论完全展开后再继续。
  • 简化文本提取:直接使用el.textContent就能获取评论的所有文本内容,无需手动遍历p标签(如果需要保留段落分隔,可保留原逻辑)。

额外补充:如果页面是滚动加载评论

如果目标页面需要滚动到底部才加载更多评论,要先执行滚动加载逻辑,再处理展开按钮:

// 先滚动加载所有评论到页面
await firstPage.evaluate(async () => {
  let lastScrollHeight = document.documentElement.scrollHeight;
  while (true) {
    window.scrollTo(0, lastScrollHeight);
    await new Promise(resolve => setTimeout(resolve, 1000));
    const newScrollHeight = document.documentElement.scrollHeight;
    if (newScrollHeight === lastScrollHeight) break;
    lastScrollHeight = newScrollHeight;
  }
});

把这段代码放在处理展开按钮的循环之前即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 21:09:49