You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Selenium自动化关闭WhatsApp弹窗失败,遇NoAlertPresentException异常

问题原因

你用driver.SwitchTo().Alert()操作失败,是因为这个弹窗不是JavaScript生成的alert/confirm/prompt,而是浏览器的外部协议请求弹窗(询问是否打开WhatsApp应用的系统级弹窗)。Selenium的SwitchTo().Alert()只能识别JS弹窗,所以会抛出NoAlertPresentException。

解决方案

方法1:修改ChromeOptions跳过外部协议弹窗

初始化ChromeOptions时添加参数,让浏览器自动跳过协议询问,直接进入网页版:

ChromeOptions options = new ChromeOptions();
// 配置跳过WhatsApp协议请求弹窗
options.AddArgument("--protocol-handler-exceptions-list=whatsapp://");
options.AddArgument("--disable-default-apps");

IWebDriver driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://api.whatsapp.com/send/?phone=%2B0000000000000&text=I%27m+interested+in+your+car+for+sale&type=phone_number&app_absent=0");
// 无需额外处理弹窗,浏览器会直接跳转至网页版聊天界面

方法2:直接使用网页版WhatsApp链接

绕过api.whatsapp.com的跳转逻辑,直接访问网页版聊天链接,从根源避免触发应用打开弹窗:

ChromeOptions options = new ChromeOptions();
IWebDriver driver = new ChromeDriver(options);
// 构造网页版聊天链接,自动编码特殊字符
string phoneNumber = "+0000000000000";
string message = Uri.EscapeDataString("I'm interested in your car for sale");
driver.Navigate().GoToUrl($"https://web.whatsapp.com/send?phone={phoneNumber}&text={message}");

注意:使用此方法需要你已在Chrome中登录过网页版WhatsApp,否则会先进入登录验证界面。

优化提示

别用Thread.Sleep()做等待,改用Selenium的显式等待更可靠,比如等待聊天输入框加载完成:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(d => d.FindElement(By.XPath("//div[@contenteditable='true']")));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:25:22