OSX High Sierra系统下Chrome Driver与Selenium运行故障求助
在MacBook Pro上解决ChromeDriver + Selenium运行问题
嘿,我来帮你搞定这个运行失败的问题!看你的代码用了RemoteWebDriver,如果只是在本地Mac上跑Chrome的话,其实没必要用这个,直接用ChromeDriver实例化会更简单,而且少踩很多坑。下面一步步给你梳理常见问题和解决办法:
1. 先确认ChromeDriver和Chrome版本完全匹配
这是最容易踩的坑!你Mac上装的Chrome版本必须和下载的ChromeDriver版本完全对应(比如Chrome是119.x,ChromeDriver就得用119.x的版本)。
- 查看Chrome版本:打开Chrome,点击右上角三个点 → 「关于Google Chrome」,就能看到当前版本。
- 下载对应版本的ChromeDriver:选适配Mac的安装包(注意区分Intel芯片和Apple Silicon芯片),下载后解压得到
chromedriver文件。
2. 处理ChromeDriver的权限问题
Mac默认会拦截非官方签名的软件,下载完ChromeDriver后可能会提示“无法打开”,解决方法:
- 打开「系统设置」→「隐私与安全性」,在“安全性”板块里找到关于ChromeDriver的提示,点击「允许」。
- 或者用终端执行命令移除隔离属性:
xattr -d com.apple.quarantine /path/to/your/chromedriver
把/path/to/your/chromedriver换成你实际的ChromeDriver文件路径,比如/Users/xxx/Downloads/chromedriver。
3. 修正你的代码(本地运行版本)
如果只是本地跑Chrome,把RemoteWebDriver换成ChromeDriver,同时指定ChromeDriver路径(如果没加到系统PATH里的话)。调整后的代码如下:
package foobar; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Test { public static void main(String args[]) { // 替换成你自己的ChromeDriver文件路径,要是已经加到PATH里可以删掉这行 System.setProperty("webdriver.chrome.driver", "/Users/yourusername/Downloads/chromedriver"); WebDriver driver = new ChromeDriver(); // 测试打开谷歌页面,验证是否正常运行 driver.get("https://www.google.com"); System.out.println("页面标题:" + driver.getTitle()); // 记得最后关闭浏览器,避免进程残留 driver.quit(); } }
4. 如果确实需要用RemoteWebDriver(比如连接Selenium Grid)
要是你是想连接Selenium Grid来运行,那得先启动ChromeDriver服务或者Grid Hub:
- 先在终端启动ChromeDriver服务:
./chromedriver --port=4444
- 然后修改代码里的URL和配置:
package foobar; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; public class Test { public static void main (String args[]) throws MalformedURLException { DesiredCapabilities chromeCaps = DesiredCapabilities.chrome(); // 连接本地启动的ChromeDriver服务 WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), chromeCaps); driver.get("https://www.google.com"); System.out.println(driver.getTitle()); driver.quit(); } }
按照上面的步骤来,应该就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者user975917
相关产品推荐
相关产品推荐

