Excel VBA结合Chrome Selenium带缓存模式无法点击登录按钮问题求助
问题核心原因
你ChromeCache子程序点击失效的核心诱因有2个:
Selenium子程序中Chrome启动命令的参数引号拼接错误,导致--user-data-dir参数传递异常,浏览器启动后处于非预期状态,点击事件被拦截- 带缓存的Chrome启动/页面加载速度比无缓存模式慢,按钮未完成事件绑定就执行点击操作,或者原生点击方法被页面安全策略拦截
修复方案
按以下步骤修改代码即可解决:
- 修正Chrome启动命令的引号拼接逻辑,新增禁用弹窗类启动参数,避免弹窗遮挡按钮
- 输入账号密码后增加短延迟,替换原生点击方法为JS点击,绕过页面策略拦截
- 增加按钮可点击状态的显式等待,避免提前操作
修改后完整代码
Public WD As New WebDriver Sub ChromeNoCache() '浏览器不会记住后续登录的账号密码 Call seleniumnocache("https://tap.revenue.wi.gov/mta/_/") WD.FindElementById("Dd-5").SendKeys "user" WD.FindElementById("Dd-6").SendKeys "password" ' 可选择也替换成JS点击保证兼容性 WD.ExecuteScript "document.getElementById('Dd-7').click();" End Sub Sub ChromeCache() '浏览器会记住后续登录的账号密码 Call selenium("https://tap.revenue.wi.gov/mta/_/") WD.FindElementById("Dd-5").SendKeys "user" WD.FindElementById("Dd-6").SendKeys "password" ' 等待500毫秒确保输入完成 WD.Wait 500 ' 显式等待按钮可用,最长等待10秒 WD.WaitUntil Not WD.FindElementById("Dd-7").Attribute("disabled"), 10000 ' 用JS点击替代原生点击,绕过页面拦截 WD.ExecuteScript "document.getElementById('Dd-7').click();" End Sub Sub Selenium(curl) '后续登录不会要求输入安全码 On Error GoTo d1 usernam = CreateObject("WScript.Network").UserName Set oShell = CreateObject("WScript.Shell") spath = "C:\Users\" & usernam & "\AppData\Local\SeleniumBasic" ' 修正引号拼接,新增禁用弹窗类参数 oShell.Run "chrome.exe -remote-debugging-port=9014 --user-data-dir=""" & spath & """ --no-first-run --no-default-browser-check --disable-popup-blocking --disable-notifications" Set oShell = Nothing WD.SetCapability "debuggerAddress", "localhost:9014" WD.Start "Chrome", "" GoTo d2 d1: WD.Start "Chrome", "" d2: WD.Get curl End Sub Sub seleniumnocache(curl) WD.Start "Chrome", "" WD.Get curl End Sub
内容的提问来源于stack exchange,提问作者user1721447
相关产品推荐
相关产品推荐

