WhatsApp批量信使按钮无响应等问题技术求助
WhatsApp Bulk Messenger 问题解决方案
问题1:发送按钮点击无响应,重试无效
原因
原代码依赖的data-testid='compose-btn-send'属性可能因WhatsApp Web版本更新失效,且未确保聊天输入框完全加载就尝试定位发送按钮,导致元素定位失败。
修复方案
修改元素定位逻辑,优先等待输入框加载完成,再用更稳定的属性定位发送按钮(中文环境下用aria-label='发送'):
# 替换原代码中try块内的逻辑 try: url = 'https://web.whatsapp.com/send?phone=' + number + '&text=' + message driver.get(url) # 先等待聊天输入框加载完成 WebDriverWait(driver, delay).until( EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='1']")) ) # 定位发送按钮(中文环境) click_btn = WebDriverWait(driver, delay).until( EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='发送']")) ) sleep(1) click_btn.click() sleep(3) print(style.GREEN + 'Message sent to: ' + number + style.RESET) except Exception as e: print(style.RED + f"Failed to send message to: {number}" + str(e) + style.RESET)
问题2:无需刷新页面发送下一个号码
实现思路
放弃每次跳转URL的方式,直接在当前页面通过WhatsApp Web的内置功能打开新聊天,避免页面刷新:
修改后核心代码
# 替换原代码中的for循环部分 for idx, number in enumerate(numbers): number = number.strip() if number == "": continue print(style.YELLOW + '{}/{} => Sending message to {}.'.format((idx+1), total_number, number) + style.RESET) try: # 点击新建聊天按钮 new_chat_btn = WebDriverWait(driver, delay).until( EC.element_to_be_clickable((By.XPATH, "//div[@title='新建聊天']")) ) new_chat_btn.click() # 输入号码到搜索框 search_box = WebDriverWait(driver, delay).until( EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='3']")) ) search_box.send_keys(number) sleep(2) # 点击搜索结果中的联系人 contact = WebDriverWait(driver, delay).until( EC.element_to_be_clickable((By.XPATH, f"//span[@title='{number}']")) ) contact.click() # 等待输入框加载并粘贴消息 input_box = WebDriverWait(driver, delay).until( EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='1']")) ) input_box.send_keys(message) # 点击发送按钮 send_btn = WebDriverWait(driver, delay).until( EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='发送']")) ) send_btn.click() sleep(3) print(style.GREEN + 'Message sent to: ' + number + style.RESET) except Exception as e: print(style.RED + 'Failed to send message to ' + number + str(e) + style.RESET)
问题3:取消重试逻辑,改为手动点击发送后跳转下一个号码
修改方案
移除3次重试循环,加载号码和消息后提示用户手动发送,等待用户确认后继续下一个:
# 替换原代码中try块内的逻辑 try: url = 'https://web.whatsapp.com/send?phone=' + number + '&text=' + message driver.get(url) # 等待页面加载完成 WebDriverWait(driver, delay).until( EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='1']")) ) print(style.YELLOW + f"请手动点击发送按钮,完成后按ENTER继续..." + style.RESET) input() # 等待用户输入确认 print(style.GREEN + 'Proceeding to next number.' + style.RESET) except Exception as e: print(style.RED + f"Failed to load chat for: {number}" + str(e) + style.RESET)
内容的提问来源于stack exchange,提问作者Hoi Ting Cheung
相关产品推荐
相关产品推荐

