如何用Python+Selenium提取WhatsApp消息中的日期数据?
提取WhatsApp网页版媒体网格视图中图片消息的日期数据
问题背景
- 每日接收大量图片,仅需处理当日图片
- 已进入WhatsApp网页版「媒体、链接和文档」子版块的网格视图
现有进展
已成功提取目标图片的outer HTML、XPath及图片的blob链接,相关代码如下:
- 图片outer HTML:
<div role="listitem" aria-label=" image" tabindex="-1" class="g0rxnol2 d0st09ow ikc09dv3 hha4v2jc gfz4du6o r7fjleex bazijzwv n0hkwe29 fvb4mgxr ho9ovbg7 tcg15ap9 c5wy1lv0 bqysl6j9"><div class="lhggkp7q qq0sjtgm tkdu00h0 b9fczbqn cm280p3y ln8gz9je ppled2lx gfz4du6o r7fjleex m62443ks rqga0wu5 ayqm650w sb46ev41 q8kvkxy1 d1poss59 gyj32ejw cmcp1to6 eg0col54 fl2x09zf r2wk4q3o nnij903c lr2nq6lc pcik6s50 oxe6ytxh"><div class="p357zi0d lhggkp7q mf2g8abl lrw9n60e"></div></div><div class="t3g6t33p qnwaluaf cm280p3y ajgl1lbb ppled2lx tukmaf4q lhggkp7q qq0sjtgm p5jrpzbl g6mp970w ln8gz9je jnl3jror"><div class="g0rxnol2 ln8gz9je ppled2lx"><div class="lhggkp7q jnl3jror p357zi0d gndfcl4n ac2vgrno ln8gz9je ppled2lx"><button class="i5tg98hk f9ovudaz przvwfww gx1rr48f shdiholb phqmzxqs gtscxtjd ajgl1lbb thr4l2wc fl2x09zf r2wk4q3o nnij903c lr2nq6lc" tabindex="-1" type="button"><div class="t3g6t33p qnwaluaf cm280p3y ajgl1lbb ppled2lx tukmaf4q lhggkp7q qq0sjtgm p5jrpzbl g6mp970w ln8gz9je jnl3jror"></div></button></div><div class="lhggkp7q jnl3jror p357zi0d gndfcl4n ac2vgrno ln8gz9je ppled2lx"><button class="i5tg98hk f9ovudaz przvwfww gx1rr48f shdiholb phqmzxqs gtscxtjd ajgl1lbb thr4l2wc fl2x09zf r2wk4q3o nnij903c lr2nq6lc" tabindex="-1" type="button"><div class="t3g6t33p qnwaluaf cm280p3y ajgl1lbb ppled2lx tukmaf4q lhggkp7q qq0sjtgm p5jrpzbl g6mp970w ln8gz9je jnl3jror"><div class="t3g6t33p qnwaluaf cm280p3y ajgl1lbb ppled2lx tukmaf4q lhggkp7q qq0sjtgm p5jrpzbl g6mp970w ln8gz9je jnl3jror" style="background-image: url("blob:https://web.whatsapp.com/bd45c444-3e4d-41e6-a8f7-107e40f7ff57");"></div></div></button></div></div></div><div style="padding-top: 100%;"></div></div> - 图片XPath:
//*@id="app"]/div/div[2]/div[5]/span/div/span/div/div[2]/span/div/div/div[1]/div/div[22]/div[2]/div/div[2]/button/div/div - 提取的图片链接:
blob:https://web.whatsapp.com/bd45c444-3e4d-41e6-a8f7-107e40f7ff57
提取日期的可行方案
方案1:直接读取列表项的属性或隐藏元素
WhatsApp网页版的媒体列表项(即你拿到的role="listitem"的div)通常包含日期相关信息:
检查
aria-label完整内容:当前aria-label仅显示" image",实际完整标签会包含日期/时间(如"2024-05-20 14:30 image")。可通过XPath提取该属性值://div[@role="listitem" and contains(@aria-label, "image")]/@aria-label再用正则匹配出日期部分,比如
\d{4}-\d{2}-\d{2}或对应格式。查找隐藏时间戳元素:若
aria-label无完整日期,可查看listitem下的隐藏子元素(class名可能随版本变化,需在开发者工具中确认),通过XPath提取文本://div[@role="listitem" and contains(@aria-label, "image")]//div[contains(@class, "t1p8iaqh")]/text()
方案2:跳转至聊天界面提取时间戳
如果网格视图中无法直接获取日期,可模拟点击图片进入聊天上下文:
- 点击当前图片对应的按钮(你已有XPath定位父元素),进入消息所在的聊天界面。
- 提取消息气泡上的时间戳:通常在带有
data-pre-plain-text属性的元素中,格式为"[2024-05-20 14:30] ",直接截取即可://div[contains(@class, "message-in") or contains(@class, "message-out")]//span[@class="copyable-text"]/@data-pre-plain-text
方案3:读取浏览器本地存储数据
WhatsApp网页版会将聊天数据存在浏览器的IndexedDB中,可通过JavaScript直接读取媒体对应的日期:
// 读取IndexedDB中的WhatsApp媒体消息日期 indexedDB.open("WhatsApp Web").onsuccess = function(e) { const db = e.target.result; const transaction = db.transaction(["messages"], "readonly"); const store = transaction.objectStore("messages"); store.openCursor().onsuccess = function(e) { const cursor = e.target.result; if (cursor) { if (cursor.value.type === "image") { console.log("日期:", new Date(cursor.value.timestamp * 1000).toLocaleDateString()); } cursor.continue(); } } };
这里的timestamp是Unix时间戳,乘以1000后转换为日期对象即可得到对应日期。
内容的提问来源于stack exchange,提问作者Pradeep Raje
相关产品推荐
相关产品推荐

