首页 > 其他 > 详细

selenuim执行脚本完毕后未关闭chromedriver任务--解决方案

时间:2021-07-13 20:09:47      阅读:22      评论:0      收藏:0      [点我收藏+]

 使用idea写页面登陆脚本,发现debug之后进程无法结束。关闭idea时出现waiting for process detach。必须kill process才能再次启动debug。

 代码如下:

导入模块省略
browser=webdriver.Chrome()
browser.get("http://10.138.60.150:8002/")
#页面操作代码省略
#查看句柄,确认确实只有一个tab
"""handle=browser.current_window_handle
print(handle)
handles=browser.window_handles
print(handles)"""
#关闭浏览器
browser.close()

因为只有一个tab页,理论上browser.close()和browser.quit()效果应该是一致的。

官网上对两者的介绍如下:

1、close() :

      用于关闭当前窗口,当打开的窗口较多时,就可以用.close()关闭部分窗口。

2、quit():

      用于结束进程 ,关闭所有窗口,尝试完全关闭浏览器。.quit()可以回收C盘的临时文件。

上面代码如果#关闭浏览器 browser.close()换成#关闭浏览器 browser.quit(),则可以顺利结束进程。

执行脚本代码时涉及任务如下:

技术分享图片

执行完close()方法后,发现chromedriver任务未关闭。

技术分享图片

手动结束任务后,idea报进程结束。可再次调试。

技术分享图片

 

 

原因分析:

频繁的启动关闭,chromdriver会增加一个比较明显的延时导致浏览器进程不被关闭的情况发生,因此.close()方法无法关闭进程,进程里残留chromedriver.exe任务,导致进程无法结束。

解决方案:

方案一、使用.quit()方法,回收C盘所有临时文件。但是要注意,.quit()方法尝试关闭所有的浏览器,多线程时要注意。

方案二、直接引用os模块,杀死进程。代码如下:

import os
#过程代码省略
#browser.quit()  #彻底关闭浏览器
os.system("taskkill /im chrome.exe /F")  #杀死chrome.exe进程
os.system("taskkill /im chromedriver.exe /F")  #杀死 chromedriver.exe进程

方案三:使用service库来实现控制chromedriver的开启和关闭。

from selenium.webdriver.chrome.service import Service

# 控制chromedriver服务
driver_service = Service("D:\Work\python\chromedriver.exe")
driver_service.command_line_args()
driver_service.start()#开启一个chromedriver.exe任务

#启动浏览器
browser = webdriver.Chrome()#这里又开启一个chromedriver.exe任务
browser.get("http://10.138.60.150:8002/")

#过程代码省略
browser.close()
driver_service.stop() 

注意:#因为.close()方法没有关闭chromedriver.exe,这里driver_service.stop()实际上是终止了2个chromedriver.exe。

 

selenuim执行脚本完毕后未关闭chromedriver任务--解决方案

原文:https://www.cnblogs.com/sweetyy/p/15007588.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!