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

如何通过Selenium获取WhatsApp Web中以+55开头的联系人列表?

问题分析与解决方案

原代码存在几个关键问题导致无法获取所有目标联系人:

  • 固定的XPATH路径//*[@id="pane-side"]/div[1]/div/div/div[13]/div/div/div/div[3]只能定位到单个特定联系人,而非所有联系人
  • 未处理WhatsApp Web的滚动加载机制,仅能获取当前可视区域内的联系人
  • 定位联系人名称的元素选择器不准确

以下是修正后的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 初始化Chrome浏览器
driver = webdriver.Chrome()
driver.get('https://web.whatsapp.com/')

# 等待用户扫码登录,可根据实际情况调整等待时间
time.sleep(30)

# 获取联系人侧边栏
pane_side = driver.find_element(By.ID, 'pane-side')
last_height = driver.execute_script('return arguments[0].scrollHeight', pane_side)

all_contacts = []

while True:
    # 定位所有联系人名称元素,使用通用的XPATH匹配所有联系人节点
    contacts = driver.find_elements(By.XPATH, '//div[@id="pane-side"]//div[@class="_21S-L"]')
    
    # 去重添加到列表
    for contact in contacts:
        contact_text = contact.text.strip()
        if contact_text not in [c.text.strip() for c in all_contacts]:
            all_contacts.append(contact)
    
    # 滚动侧边栏加载更多联系人
    driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', pane_side)
    time.sleep(2)
    
    # 检查是否已滚动到底部
    new_height = driver.execute_script('return arguments[0].scrollHeight', pane_side)
    if new_height == last_height:
        break
    last_height = new_height

# 筛选以+55开头的联系人
filtered_contacts = [contact for contact in all_contacts if contact.text.strip().startswith('+55')]

# 输出结果
print(f"找到{len(filtered_contacts)}个以+55开头的联系人:")
for contact in filtered_contacts:
    print(contact.text.strip())

driver.quit()

关键修改说明

  • 更换了联系人元素的定位XPATH://div[@id="pane-side"]//div[@class="_21S-L"],这个选择器可以匹配所有联系人的名称区域(注意:WhatsApp Web的class可能会更新,若失效可通过浏览器开发者工具重新获取最新class)
  • 添加了滚动加载逻辑,循环滚动侧边栏直到加载完所有联系人,避免遗漏未显示的联系人
  • 增加了联系人去重处理,防止重复抓取同一联系人
  • 优化了文本处理,使用strip()去除多余空格,避免判断出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:40:48