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
相关产品推荐
相关产品推荐

