VBA中Chrome Webdriver执行后自动关闭如何解决?附Selenium疑问
Selenium VBA Chrome自动关闭及执行顺序问题解答
一、避免Chrome执行完自动关闭的方法
Chrome执行完操作后自动关闭,是因为过程结束后ChromeDriver局部变量被销毁,浏览器随之关闭。有两种常用解决方式:
方式1:将Driver声明为模块级变量
在模块的最顶部(所有Sub之外)声明ChromeDriver对象,这样过程结束后对象不会被自动销毁,浏览器会保持打开状态,直到你手动调用Browser.Quit:' 模块顶部声明(所有Sub外部) Dim Browser As Selenium.ChromeDriver Sub RunSelenium() Set Browser = New Selenium.ChromeDriver Browser.Get "https://www.google.com" Browser.Window.Maximize Browser.FindElementById("userName").SendKeys Sheet1.Range("B2") ' 后续需要关闭时再调用 ' Browser.Quit ' Set Browser = Nothing End Sub方式2:手动暂停过程结束时机
如果不想用模块级变量,可以在代码最后加入暂停逻辑,让过程不立即结束,比如用弹窗等待用户确认,或者固定时长等待:Sub RunSelenium() Dim Browser As Selenium.ChromeDriver Set Browser = New Selenium.ChromeDriver Browser.Get "https://www.google.com" Browser.Window.Maximize Browser.FindElementById("userName").SendKeys Sheet1.Range("B2") ' 弹窗等待用户点击后关闭浏览器 MsgBox "操作完成,点击确定关闭浏览器" Browser.Quit Set Browser = Nothing ' 或者固定等待10秒后自动关闭 ' Browser.Wait 10000 ' 单位:毫秒,10000=10秒 ' Browser.Quit ' Set Browser = Nothing End Sub
二、是否需要加入Application.Wait?
Selenium VBA的核心方法默认是同步执行的:
Browser.Get会等待页面加载完成(除非修改了页面加载策略);FindElementById这类查找元素的方法,默认会等待元素出现(超时时间可通过timeout参数设置);- 所有操作都会在上一行执行完成后,才会运行下一行。
因此一般不需要额外添加Application.Wait,固定时长等待反而不够灵活。如果遇到动态加载的元素或页面加载缓慢的情况,推荐使用Selenium自带的等待机制:
- 固定时长等待:
Browser.Wait 5000(等待5秒,单位毫秒); - 显式等待元素:在查找元素时指定超时时间,比如:
' 等待"userName"元素出现,超时10秒 Browser.FindElementById("userName", timeout:=10000).SendKeys Sheet1.Range("B2")
内容的提问来源于stack exchange,提问作者Pramod Pandit
相关产品推荐
相关产品推荐

