如何修复基于Selenium的WhatsApp Web自动@好友失效脚本
解决WhatsApp Web批量@指定好友的问题
原脚本没法完成批量@的核心问题是:WhatsApp Web的@提醒需要选中联系人选项才会生效,直接输入@加名字只是普通文本,不会触发@通知;另外原脚本的ActionChains操作存在累积重复的问题。
下面是修改后的完整脚本,关键改动已标注注释:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time # Brave浏览器路径,根据自身实际路径调整 brave_path = "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser" # ChromeDriver路径 chromedriver_path = "/usr/local/bin/chromedriver" # 配置浏览器选项 options = webdriver.ChromeOptions() options.binary_location = brave_path # 启动浏览器 driver = webdriver.Chrome(service=Service(chromedriver_path), options=options) driver.get("https://web.whatsapp.com") # 等待手动登录 input("登录WhatsApp Web后按回车继续...") # 等待搜索框加载并定位 wait = WebDriverWait(driver, 30) search_box = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@contenteditable="true"][@data-tab="3"]'))) # 搜索目标群聊 search_box.click() search_box.send_keys("Group Name") # 替换成你的群聊名称 search_box.send_keys(Keys.ENTER) # 等待消息输入框加载 message_box = wait.until(EC.visibility_of_element_located((By.XPATH, '//div[@contenteditable="true"][@data-tab="1"]'))) time.sleep(2) # 批量@操作核心逻辑 for _ in range(100): # 点击输入框确保激活状态 message_box.click() # 输入@和好友名字 message_box.send_keys("@John") # 替换成要@的好友昵称 # 给页面一点加载联系人选项的时间 time.sleep(0.5) # 按向下箭头选中第一个匹配的联系人 message_box.send_keys(Keys.DOWN) # 确认选中该联系人,生成有效@标签 message_box.send_keys(Keys.ENTER) # 换行,暂不发送消息 message_box.send_keys(Keys.SHIFT + Keys.ENTER) # 最后发送所有@内容 message_box.send_keys(Keys.ENTER) # 关闭浏览器 driver.quit()
关键改动说明:
- 去掉了易出问题的ActionChains,直接操作消息输入框元素,避免操作累积
- 增加输入@名→按向下箭头选联系人→按回车确认的流程,确保生成WhatsWeb可识别的有效@标签
- 保留必要的短延迟,适配Web页面的加载速度
注意:替换代码中的Group Name和@John为实际群聊名称和好友昵称;若存在重名好友,可增加Keys.DOWN的次数来选中目标联系人。
内容的提问来源于stack exchange,提问作者RoooooKie
相关产品推荐
相关产品推荐

