Selenium访问WhatsApp Web发送页部分有效手机号提示URL号码无效
可行解决方案
这个报错和号码是否真实注册WhatsApp无关,基本都是URL参数不符合校验规则、加载时序问题或风控限制导致,按以下顺序排查即可:
- 首先修正号码格式:
phone参数只接受纯数字串,必须包含正确的国家代码,不能带加号、空格、横杠、括号等特殊字符,不能带本地号码前缀0,不能带00开头的国际冠字。
举个例子:中国手机号+86 138xxxx1234,合法传值是86138xxxx1234;英国本地号码07911 123456(国家代码44),合法传值是447911123456,传其他格式都会触发无效号码报错。
可以在拼接URL前加一段通用清洗逻辑,提前处理所有格式异常:import re def format_whatsapp_number(phone_num): # 移除所有非数字字符 num = re.sub(r'\D', '', str(phone_num)) # 移除开头的00国际冠字 if num.startswith('00'): num = num[2:] # 移除本地号码开头的前缀0 elif num.startswith('0'): num = num[1:] return num cleaned_phone = format_whatsapp_number(x) driver.get(f'https://web.whatsapp.com/send?phone={cleaned_phone}') - 排除格式问题后仍报错的,先确认Selenium执行跳转的时机:必须等WhatsApp Web完全加载登录态、左侧聊天侧边栏渲染完成后再跳转,未加载完成时直接访问带参数的URL会偶发号码无效的误判。可以加显式等待控制时序:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待登录态加载完成,最长等待30秒 WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.ID, 'pane-side')) ) # 加载完成后再跳转目标聊天页 driver.get(f'https://web.whatsapp.com/send?phone={cleaned_phone}') - 以上两步都无效的,检查是否触发风控:短时间高频跳转不同号码、账号未过新号冷启动期、目标号码设置了隐私权限禁止非联系人发起对话,都会返回无效号码提示。这种情况可以先把目标号码手动存为手机通讯录联系人,等待通讯录同步到Web端后再尝试跳转,同时控制操作频率,避免被限制功能。
内容的提问来源于stack exchange,提问作者Princeofcoding
相关产品推荐
相关产品推荐

