C#使用Selenium如何复用已登录WhatsApp Web连接发送消息
核心问题
你之前的两种配置都没法复用登录态,本质是三个问题:
- 第二种方案里写的
--user-data-dir=chrome-data是相对路径,指向你程序运行目录下新建的空文件夹,根本不是你日常用的存了WhatsApp登录凭证的Chrome配置目录 - 只要你本机有正在运行的Chrome进程打开了对应配置,直接指定该配置路径启动WebDriver会因为配置文件被进程独占锁定,自动回退到临时全新配置,必然要求扫码
- 你用的
AddAdditionalChromeOption是旧版Selenium的API,在Selenium 4.x+版本里传useAutomationExtension参数会失效,没法正确隐藏自动化标识。
可直接运行的正确配置
先做前置准备:
- 打开你日常用的Chrome,地址栏输入
chrome://version/,找到「个人资料路径」这一项,复制路径的根目录(比如路径是C:\Users\张三\AppData\Local\Google\Chrome\User Data\Default,根目录就是C:\Users\张三\AppData\Local\Google\Chrome\User Data,最后一段的Default就是你用的配置文件夹名) - 打开任务管理器,结束所有chrome.exe进程,彻底关闭Chrome,避免配置文件锁冲突
然后用下面的代码初始化驱动:
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; // 替换成你刚才复制的Chrome用户数据根目录绝对路径 string chromeUserDataPath = @"C:\Users\张三\AppData\Local\Google\Chrome\User Data"; // 替换成你查到的配置文件夹名,默认是Default,多配置的话是Profile 1/Profile 2这类 string chromeProfileName = "Default"; ChromeOptions options = new ChromeOptions(); // 隐藏自动化特征,避免WhatsApp检测到WebDriver环境 options.AddExcludedArgument("enable-automation"); options.AddAdditionalOption("useAutomationExtension", false); // 指定正确的配置路径 options.AddArgument($"--user-data-dir={chromeUserDataPath}"); options.AddArgument($"--profile-directory={chromeProfileName}"); // 禁用无关弹窗 options.AddArgument("--no-first-run"); options.AddArgument("--no-default-browser-check"); options.AddArgument("--disable-notifications"); // 初始化驱动,打开WhatsApp网页版 IWebDriver driver = new ChromeDriver(options); driver.Navigate().GoToUrl("https://web.whatsapp.com/");
启动后会直接加载你之前的登录状态,不需要重新扫码。
避坑提示
- 如果不想和你日常使用的Chrome进程冲突,可以把刚才查到的User Data文件夹整个复制一份到你脚本专属的目录,后续
--user-data-dir指向这个复制出来的副本就行。第一次用副本启动的时候手动扫一次码登录,之后脚本永远可以直接用这个副本的登录态,哪怕你平时开着Chrome刷网页也不会有文件锁冲突。 - 所有路径必须写绝对路径,不要用相对路径,不然程序工作目录变化时会找不到原有配置,自动生成空的新配置文件夹导致要重新扫码。
- 如果启动后还是跳扫码,先检查是不是还有Chrome后台进程没关干净,再检查路径是不是写错了。
内容的提问来源于stack exchange,提问作者Vlad Breabăn
相关产品推荐
相关产品推荐

