Selenium在Safari中实现身份验证自动填充的解决方案求助
解决Selenium JS在Safari中无法通过URL嵌入账号密码登录的问题
问题原因
Safari出于安全限制,已禁用URL中通过login:password@server.net格式进行HTTP基本认证的方式,因此该写法仅在Chrome、Firefox等浏览器生效,在Safari中无效。
解决方案
方案1:手动定位页面登录控件(推荐,通用所有浏览器)
如果登录通过页面内的用户名/密码输入框实现,直接定位元素并输入信息提交即可:
const { By } = require('selenium-webdriver'); // 打开目标站点 await driver.get("https://server.net"); // 输入用户名 const usernameField = await driver.findElement(By.id('username')); // 根据实际元素选择器修改 await usernameField.sendKeys('login'); // 输入密码 const passwordField = await driver.findElement(By.id('password')); // 根据实际元素选择器修改 await passwordField.sendKeys('password'); // 点击登录按钮 const loginButton = await driver.findElement(By.id('login-btn')); // 根据实际元素选择器修改 await loginButton.click();
方案2:处理Safari系统级认证弹窗
如果是浏览器弹出的HTTP基本认证对话框(非页面内控件),可通过Node.js调用AppleScript实现自动输入:
const { exec } = require('child_process'); // 先打开目标页面 await driver.get("https://server.net"); // 执行AppleScript自动填充认证信息 exec(`osascript -e 'tell application "Safari" to activate' -e 'tell application "System Events" to keystroke "login"' -e 'tell application "System Events" to keystroke tab' -e 'tell application "System Events" to keystroke "password"' -e 'tell application "System Events" to keystroke return'`, (err) => { if (err) console.error('处理认证弹窗失败:', err); });
注意:使用此方法需要给运行脚本的终端/应用赋予「辅助功能」权限(系统设置-隐私与安全性-辅助功能)。
内容的提问来源于stack exchange,提问作者Darek Adamczyk
相关产品推荐
相关产品推荐

