selenuim執行腳本完畢后未關閉chromedriver任務--解決方案


 使用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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM