python - 无法终止 Chrome 进程并使用 ChromeDriver 和 Chrome 通过 Python 中的 Selenium 运行内存不足

标签 python selenium google-chrome web-scraping selenium-chromedriver

我有一个爬行过程,在一个自定义类中启动 Selenium ,如下所示:

class BrowserInterface:

def __init__(self, base_url, proxy_settings):

    self.base_url = base_url

    self.display = Display(visible=0, size=(1024, 768))
    self.display.start()

    proxy_argument = '--proxy-server={0}'.format(PROXY_URL.format(
        proxy_settings.get('proxy_host'),
        proxy_settings.get('proxy_port')
    ))

    logger.debug(proxy_argument)

    options = webdriver.ChromeOptions()
    options.add_argument('--no-sandbox')
    options.add_argument(proxy_argument)

    selenium_chrome_driver_path = os.path.join(settings.DEFAULT_DRIVER_PATH,
                                               settings.CHROME_DRIVERS[settings.CURRENT_OS])

    self.driver = webdriver.Chrome(executable_path=selenium_chrome_driver_path, chrome_options=options)

def visit(self, url):
    url = urljoin(self.base_url, url)
    self.driver.get(url)

def body(self):
    soup = BeautifulSoup(self.driver.page_source)
    return soup.find("body").text

def quit(self):
    self.driver.quit()
    self.display.stop()

此 BrowserInterface 类在批处理队列中初始化,并在批处理结束时调用 quit() 方法。启动 Chrome 并获取数据没有问题。问题是,在每个作业结束时,当调用 quit() 方法时,chrome 就会进入僵尸模式。当下一个 BrowserInterface 初始化时,它会启动一个新的 chrome 实例。因此,盒子内存不足。我也尝试在 chrome 进程上运行kill命令,但它仍然在运行。任何方向将不胜感激,因为我正要为此抓狂。

运行于 Ubuntu 18.04、Google Chrome 70.0.3538.110、ChromeDriver 2.44、Python3.6.6

提前致谢!

最佳答案

从您的代码试验来看,很明显您已经调用了 self.driver.quit() ,它应该可以完美地工作。

但是,由于僵尸chrome进程,盒子仍然内存不足运行,您采取了正确的方法来执行>kill 命令,您可以在 quit() 方法中添加以下解决方案:

from selenium import webdriver
import psutil

driver = webdriver.Chrome()
driver.get('http://google.com/')

PROCNAME = "chrome" # to clean up zombie Chrome browser
#PROCNAME = "chromedriver" # to clean up zombie ChromeDriver
for proc in psutil.process_iter():
    # check whether the process name matches
    if proc.name() == PROCNAME:
        proc.kill()

关于python - 无法终止 Chrome 进程并使用 ChromeDriver 和 Chrome 通过 Python 中的 Selenium 运行内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53603901/

相关文章:

python - 在 Eclipse + Pydev 中使用 WinPython 发行版?

java - 定位元素最快的方法selenium+java

javascript - 如何从内存中清除图像 - 从 DOM 中删除后

javascript - Jquery .load() 函数在 Chrome 上不起作用?

python - 在 Eve 中,如何创建集合的子资源并保留父集合端点?

在 Ubuntu 上导入 PyQt4.QtDeclarative 或 PyQt4.Qt 时 Python 2.7 崩溃

python - 可以在不等待流程完成的情况下调用 subprocess.call 吗?

java - 无法通过 Java/Selenium 单击 Bootstrap 下拉菜单

java - 在 Java 中将 File[] 转换为 String[]

android - 在 Android 上的 Chrome 中禁用 native 延迟加载图像