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

Windows7下运行Python WhatsApp群发代码遇TimeoutException问题求助

解决WhatsApp Web自动化群发时的TimeoutException问题

我看到你在Windows 7上用Selenium实现WhatsApp群发时遇到了TimeoutException,这个错误通常是因为Selenium在指定时间内找不到目标元素导致的。咱们一步步来排查和解决这个问题:

报错根源分析

你的报错信息指向等待联系人元素的代码行:

group_title = wait.until(EC.presence_of_element_located(( By.XPATH, x_arg)))

这说明Selenium在600秒内都没找到匹配联系人名称的元素,大概率是联系人名称处理有误、元素定位方式不稳定,或者页面加载状态判断不准确导致的。


具体解决方案

1. 修复联系人名称的编码处理

你代码里对联系人做了encode('utf-8')再decode('utf-8')的冗余操作,反而可能导致特殊字符(比如中文、带重音的字符)处理出错,直接用字符串即可:

def readContacts(fileName):
    lst = []
    file = excel.load_workbook(fileName)
    sheet = file.active
    # 更简洁的遍历方式,同时过滤空单元格
    for row in sheet.iter_rows(min_row=1, max_col=1, values_only=True):
        contact = row[0]
        if contact is not None:
            lst.append(str(contact))
    return lst

2. 改用更稳定的元素定位逻辑

WhatsApp Web的类名会随版本更新变化,建议用更精准的XPATH替代类名定位,同时通过搜索框查找联系人的方式比直接遍历列表更可靠:

3. 优化等待逻辑

不要依赖全局等待对象,针对每个操作单独设置等待条件,确保页面元素真正就绪后再执行下一步。


修复后的完整代码

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
import openpyxl as excel
from selenium import webdriver

# 初始化Chrome驱动(确保Chrome和ChromeDriver版本匹配,Windows7最高支持Chrome114)
driver = webdriver.Chrome("C:\\Users\\Yogesh Wadhwa\\AppData\\Local\\Programs\\Python\\Python38-32\\chromedriver.exe")

def readContacts(fileName):
    lst = []
    file = excel.load_workbook(fileName)
    sheet = file.active
    for row in sheet.iter_rows(min_row=1, max_col=1, values_only=True):
        contact = row[0]
        if contact is not None:
            lst.append(str(contact))
    return lst

# 读取联系人列表
targets = readContacts("C:\\Users\\Yogesh Wadhwa\\AppData\\Local\\Programs\\Python\\Python38-32\\HNI.xlsx")

# 打开WhatsApp Web并等待扫码登录
driver.get("https://web.whatsapp.com/")
wait = WebDriverWait(driver, 600)
# 等待搜索框出现,确认页面加载完成
wait.until(EC.presence_of_element_located((By.XPATH, "//div[@title='搜索输入框']")))

msg = input('Enter the message : ')

for target in targets:
    try:
        # 点击并清空搜索框
        search_box = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@title='搜索输入框']")))
        search_box.click()
        search_box.clear()
        
        # 输入联系人名称并等待搜索结果
        search_box.send_keys(target)
        time.sleep(2)
        
        # 点击匹配的联系人
        contact_xpath = f"//span[@title='{target}']"
        contact = wait.until(EC.element_to_be_clickable((By.XPATH, contact_xpath)))
        contact.click()
        
        # 输入消息并按回车发送(比点击按钮更稳定)
        msg_box = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true' and @data-tab='1']")))
        msg_box.send_keys(msg)
        msg_box.send_keys(Keys.ENTER)
        
        time.sleep(3)  # 给消息发送完成留缓冲时间
    except Exception as e:
        print(f"处理联系人 {target} 时出错: {str(e)}")
        continue

driver.close()

额外注意事项

  • 确保Chrome浏览器和ChromeDriver版本严格匹配,Windows 7上Chrome最高支持到版本114,需下载对应版本的驱动
  • WhatsApp Web会检测自动化操作,建议不要设置过短的间隔时间,避免临时限制
  • 如果有重复名称的联系人,需要优化搜索后的定位逻辑,确保选择正确的对象

内容的提问来源于stack exchange,提问作者Yogesh Kumar Wadhwa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:22:41