driver.quit() 和 pkill chrome 释放内存的效果一样吗?

问题描述

我有一个 python 脚本,它使用 selenium 来执行一些网页点击和抓取。脚本在 ubuntu 上,在 EC2 实例上运行。基本代码

from selenium import webdriver
from bs4 import BeautifulSoup as bs
import datetime
from datetime import datetime as dt
import re
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import ElementNotVisibleException
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import TimeoutException
    
from selenium.webdriver.common.by import By
    
#Set driver options
options = Options()
options.add_argument('--no-sandBox')
options.add_argument('--window-size=1420,1080')
options.add_argument('--headless')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-gpu')
options.add_argument("--disable-notifications")

options.add_experimental_option("excludeSwitches",["enable-automation"])

options.add_experimental_option('useAutomationExtension',False)
    
driver = webdriver.Chrome(chrome_options=options,executable_path=r'/Applications/chromedriver_91')

# Do a bunch of stuff................

driver.quit() #invoke after web-scraping

在这种情况下,driver.quit() 是否本质上与 linux 命令 pkill chrome 做相同的事情?有时,此脚本会因为内存不足而崩溃。在终端本身中将 pkill chromepkill -f "(chrome)?(--headless)" 结合使用通常会杀死所有进程并释放内存,然后脚本将工作。

driver.quit() 是否足以以无头或其他方式关闭所有 chrome 进程?在我的 python 脚本中添加一些东西,如:

import os 
os.system("pkill chrome") 

正在做 driver.quit() 还没有做的事情吗?我只想通过在 python 脚本运行后确保 chrome 完全关闭来最大程度地减少崩溃的机会。

谢谢。

解决方法

driver.quit() 仅退出(关闭)这个特定的 driver 对象。
这绝对不会关闭任何其他正在运行的 driver 进程。
chromedriver 涉及的进程也显示为 chromedriverchromedriver (32 bit),而不是 chromechrome 进程是您的 Chrome 浏览器,而不是 Selenium 网络驱动程序。
为确保关闭 chromedriver,您可以在 try-except-finally 块内使用涉及 driver.quit()finally
我不确定这是最佳方法,因为 AFAIK 这可能会影响报告机制。