如何在Jupyter Notebook中展示Selenium WebDriver打开的Chrome访问URL
WSL 环境下 Jupyter 运行 Selenium 可视化 Chrome 窗口实操方案
问题核心原因
- 现有代码强制启用*--headless*无头模式,会完全关闭Chrome的图形渲染能力,从机制上就不可能弹出可见的浏览器窗口
- 默认安装的WSL是纯命令行架构,没有内置图形显示服务,就算直接删掉
--headless参数,Chrome也会因为找不到可输出窗口的显示通道直接启动报错,根本复刻不了本地Spyder的窗口弹出效果
分步实现方案
- 打通WSL到Windows的图形渲染通道
- 在WSL终端安装基础X11依赖:执行
sudo apt install x11-xserver-utils - 在Windows侧安装本地X Server工具(如VcXsrv),启动时一定要勾选「禁用访问控制」,不然WSL的程序推送的窗口会被权限拦截
- 给WSL配置指向Windows显示服务的环境变量:打开
~/.bashrc配置文件,在末尾追加export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0,执行source ~/.bashrc让配置全局生效,后续WSL内运行的带界面程序,就能把窗口直接推送至Windows桌面显示
- 在WSL终端安装基础X11依赖:执行
- 调整Selenium启动参数
- 直接删除原代码中的
--headless启动参数 - 保留两个WSL环境下Chrome运行必须的兼容参数:
--no-sandbox、--disable-dev-shm-usage,缺少这两个参数会触发Chrome权限校验失败、共享内存分配报错,导致启动失败 - 追加
--start-maximized参数,让启动的Chrome窗口直接最大化,对齐本地Spyder代码的运行效果
- 直接删除原代码中的
改造后可直接运行的代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 已移除无头模式参数 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--start-maximized') driver = webdriver.Chrome('/usr/bin/chromedriver', options=chrome_options) driver.get('https://www.google.nl/')
运行注意事项
- 执行Selenium代码前,需确认Windows侧的X Server程序已正常启动,且系统防火墙未拦截X Server的本地通信端口,否则窗口无法成功推送
- 启动Jupyter Notebook的终端需已加载配置好的DISPLAY环境变量,否则仍会触发Chrome找不到显示设备的启动错误
- 代码正常运行后,Chrome独立窗口会直接弹出在Windows桌面,窗口顶部带有「Chrome正受自动化测试软件控制」的提示条,和本地Spyder运行同逻辑代码的效果完全一致
内容的提问来源于stack exchange,提问作者Soumya Pandey
相关产品推荐
相关产品推荐

