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

Node.js中如何捕获HTML页面文本并实现配送槽位预约的条件判断

Puppeteer配送槽位预约功能修改方案

1. 捕获槽位满员提示的实现

你可以通过两种常用方式判断提示文本是否存在:

  • 方案1(简单易上手):直接获取当前页面完整HTML内容,匹配目标字符串
    调用await page.content()可以拿到页面全部渲染后的HTML代码,直接判断是否包含Delivery slots for these dates are fully booked即可。
  • 方案2(性能更高):通过元素选择器定位提示框元素后读取文本
    如果你知道提示文本所在元素的选择器,可以用page.$eval直接读取该元素的文本内容判断,避免全量匹配HTML。

2. 条件分支逻辑实现

基于上面的判断结果,用if/else分支分别处理两种场景即可,槽位满员时直接调用page.goto跳转至其他预约页面执行对应逻辑。

修改后完整代码

async function reserved_slot(page, target_url, backup_book_url) {
  var fifthwkslotdate= new Date();
  fifthwkslotdate.setDate(fifthwkslotdate.getDate() + 7);
  await page.goto(`${target_url}en-GB/slots/delivery/${fifthwkslotdate}?slotGroup=1`, {waitUntil: 'networkidle2'});
  await page.waitForTimeout(3000);
  await page.screenshot({path: 'HomeDeliveryFifthwkPage.png'});

  // 判断槽位是否已满
  const pageHtml = await page.content();
  const isFullyBooked = pageHtml.includes('Delivery slots for these dates are fully booked');

  if (isFullyBooked) {
    // 槽位满员,跳转至备用预约页面
    await page.goto(backup_book_url, {waitUntil: 'networkidle2'});
    await page.waitForTimeout(3000);
    // 这里补充备用页面的预约操作逻辑即可
    await page.screenshot({path: 'BackupBookPage.png'});
  } else {
    // 槽位可用,执行原预约逻辑
    await page.click('[class="button button-secondary small available-slot--button available-slot--button--cc-link-enabled"]');
    await page.waitForTimeout(3000);
    await page.screenshot({ path: 'Reservedelslotpage.png'});
  }
}

注意事项

  • 调用函数时需要传入第三个参数backup_book_url,也就是你要跳转的其他预约页面地址
  • 如果提示文本是动态渲染的,可以把判断逻辑放在waitForTimeout之后执行,确保页面元素加载完成
  • 如果你能拿到提示文本的专属选择器,可以把判断逻辑替换成更精准的版本,示例如下:
// 假设提示文本在class为slot-notice的元素里
const noticeText = await page.$eval('.slot-notice', el => el.textContent.trim());
const isFullyBooked = noticeText === 'Delivery slots for these dates are fully booked';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:12:02