Selenium Python 自动化WhatsApp消息时如何处理阻断交互的WhatsApp弹窗
项目开发背景
正在开发通过URL链接自动化发送WhatsApp消息的功能,跳转链接格式为 https://wa.me/number_here
遇到的问题
手动操作全流程正常,但使用Selenium Python执行自动化流程时,会弹出WhatsApp自研的网页端弹窗,完全阻断所有页面交互:无法右键呼出菜单、无法打开开发者选项,无法获取弹窗内按钮的定位信息。
已尝试的解决方式全部未生效:
- 使用
driver.switch_to相关方法、alert.close操作,运行后提示不存在对应的浏览器原生alert - 通过
contains(text)方法定位弹窗按钮,无法匹配到对应元素
现有测试代码
chrome_options = Options() chrome_options.add_argument('--user-data-dir = user-data') chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) chrome_options.add_argument('--disable-notifications') chrome_options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=chrome_options, executable_path= driver_path) wait = WebDriverWait(driver, 60) contact = f'https://wa.me/{number}' driver.get(contact) time.sleep(3) alert = wait.until(EC.alert_is_present()) alert.accept()
弹窗示例:跳转至wa.me域名后,WhatsApp返回的网页端确认提示弹窗,会阻断所有页面交互
解决方案
- 核心认知纠偏:这个阻断交互的弹窗不是浏览器原生alert,是WhatsApp网页端实现的DOM元素弹窗,因此用
EC.alert_is_present()完全无法识别,所有针对原生alert的操作都是无效的。 - 分步骤解决:
- 第一步:在Chrome启动参数中补充配置,提前屏蔽网站端的权限请求、弹窗拦截逻辑,直接放行
wa.me到WhatsApp Web的跳转:# 补全到原有chrome_options配置中 chrome_options.add_experimental_option("prefs", { "profile.default_content_setting_values.notifications": 2, "profile.default_content_setting_values.popups": 2, }) # 禁用浏览器自带的弹窗拦截 chrome_options.add_argument('--disable-popup-blocking') - 第二步:替换原有无效的alert等待逻辑,直接通过弹窗按钮的固定文本特征定位并点击:
WhatsApp跳转确认弹窗的按钮文本固定包含“继续前往WhatsApp Web”标识,不需要手动获取xpath,直接通过文本匹配触发点击:# 删除原有等待alert的代码,替换为以下逻辑 # 等待弹窗内的确认按钮可点击后自动点击 confirm_btn = wait.until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'WhatsApp Web')]")) ) confirm_btn.click() - 第三步:如果运行时还是出现弹窗阻断右键、开发者选项调用的情况,在页面加载前注入脚本,禁用网页端的交互拦截逻辑:
# 初始化driver后立即执行,对所有新开页面生效 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ // 移除页面的右键拦截 document.addEventListener('contextmenu', e => e.stopPropagation(), true); // 屏蔽页面自定义的alert/confirm弹窗 window.alert = () => {}; window.confirm = () => {}; """ })
- 第一步:在Chrome启动参数中补充配置,提前屏蔽网站端的权限请求、弹窗拦截逻辑,直接放行
- 细节修正避坑:
- 原有代码中
--user-data-dir = user-data参数的等号前后存在空格,Selenium会将包含空格的全字符串识别为参数值,导致用户配置目录匹配失败,需要去掉空格修正为--user-data-dir=user-data - 移除代码中的硬等待
time.sleep(3),全部替换为WebDriverWait的显式等待,避免元素未加载完成就执行操作导致的定位失败
- 原有代码中
内容的提问来源于stack exchange,提问作者Romeo
相关产品推荐
相关产品推荐

