能否在Cheerio中模拟鼠标悬停?When2Meet爬取需求
解决When2Meet悬停区块后爬取左侧弹窗人员信息的问题
问题分析
直接用jQuery.hover()无效,大概率是两个原因:
- 时间区块元素是动态生成的,直接绑定事件到静态元素上无法覆盖后续加载的区块
- When2Meet的交互逻辑可能依赖原生
mouseenter事件,而非jQuery封装的hover(它是mouseenter+mouseleave的简写)
解决方案
用事件委托绑定mouseenter事件,确保能捕获动态生成的时间区块,再获取弹窗内的人员信息:
先通过浏览器开发者工具确认目标选择器:
- 时间区块的类名(比如实际是
.TimeBlock,可在Elements面板里查看) - 左侧弹窗的人员列表容器(比如
#AvailablePeople ul)
- 时间区块的类名(比如实际是
绑定事件并提取信息:
// 用事件委托监听所有时间区块的鼠标移入事件 $(document).on('mouseenter', '.TimeBlock', function() { // 等待弹窗渲染完成(给100ms延迟,避免DOM未更新) setTimeout(() => { // 提取弹窗内的所有人员名称 const availablePeople = $('#AvailablePeople li').map(function() { return $(this).text().trim(); }).get(); // 输出结果,可根据需求存入变量或做其他处理 console.log('可用人员:', availablePeople); }, 100); });
额外提示
- 如果延迟100ms不够,可适当调整数值,确保弹窗内容已加载
- 若要监听鼠标移出事件,可在同一事件委托里绑定
mouseleave,或者单独写$(document).on('mouseleave', '.TimeBlock', ...) - 批量爬取时不要过于频繁触发事件,避免页面卡顿
内容的提问来源于stack exchange,提问作者Baselistic
相关产品推荐
相关产品推荐

