You need to enable JavaScript to run this app. Selenium Python 自动化WhatsApp消息时如何处理阻断交互的WhatsApp弹窗
优惠活动
大模型
产品
解决方案
定价
更多

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返回的网页端确认提示弹窗,会阻断所有页面交互


解决方案

  1. 核心认知纠偏:这个阻断交互的弹窗不是浏览器原生alert,是WhatsApp网页端实现的DOM元素弹窗,因此用EC.alert_is_present()完全无法识别,所有针对原生alert的操作都是无效的。
  2. 分步骤解决:
    • 第一步:在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 = () => {};
          """
      })
      
  3. 细节修正避坑:
    • 原有代码中--user-data-dir = user-data参数的等号前后存在空格,Selenium会将包含空格的全字符串识别为参数值,导致用户配置目录匹配失败,需要去掉空格修正为--user-data-dir=user-data
    • 移除代码中的硬等待time.sleep(3),全部替换为WebDriverWait的显式等待,避免元素未加载完成就执行操作导致的定位失败

内容的提问来源于stack exchange,提问作者Romeo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 21:57:09