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
相关产品推荐
相关产品推荐

