当前位置: 首页 > 知识库问答 >
问题:

chromedriver.quit后的多个铬工艺()

经清野
2023-03-14

我正在运行一个Django服务,它为selenium启动chromedriver,并从网站上获取数据。Django服务由另一个Java服务通过HTTP调用。

这是代码:

views.py

path_to_chromedriver = '/path/to/chromedriver' 
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
try:
    response = get_data(browser)
except Exception as e:
    print str(e)
finally:
    browser.close()
    browser.quit()

刮刀py公司

get_data(browser)
    try:
        .
        .
        .
        for i in range(1,6):
            try:
                .
                .
                .
             return "success data"
             except NoSuchElementException:
                 browser.back()
         raise Exception("No results found")
    except Exception as e:
         print str(e)
         raise

问题是,在java服务完成所有调用并完成整个过程后,有25-50个chrome进程孤立在RAM中,占用超过1 GB的内存。我在这里有什么不对吗?

共有3个答案

佴普松
2023-03-14

想扩展@Serge B给出的答案。

使用浏览器确实更好。通过浏览器退出()。close(),因为最后一个窗口可能只关闭当前窗口,而第一个窗口将关闭所有窗口(和所有进程)。

我仍然认为你这样做不会解决你的问题。

我遇到了同样的问题——当驱动程序由Java进程运行时,它没有关闭。我在使用TeamCity运行测试时遇到了它。请尝试在没有您使用的Java服务的情况下运行您的代码,并确保这是问题所在。

如果是这个问题,那么我建议用Python方法杀死所有进程。这是我使用的解决方案,它对我有效。不幸的是,当时我使用了C#,接下来的代码帮助了我https://stackoverflow.com/a/35692319/4019586但这不是你现在可以使用的。

我不知道如何在Python上做到这一点,但这可能是您的解决方案。我认为使用Python这将https://stackoverflow.com/a/6278951/4019586.

所以积极的一面是你做得都对!)这只是硒中的一个错误。

隗轶
2023-03-14

在退出之前不要关闭,并通过try/除外环绕代码。

try:
    browser.quit()
except WebDriverException:
    pass
郁隐水
2023-03-14

这是一个老问题。虽然很脏,但对我有效的方法是在戒烟前补充睡眠:

time.sleep(5)
browser.quit()
 类似资料:
  • 我使用Selenium和PhantomJS开发了几个Python脚本。当我转向自动下载时,我切换到了(headed)Firefox(有效),然后是Chrome,有了headless选项,这样浏览器就不会在我面前打开了。 我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美地工作。 第二个,然而,工作与头铬。如果我加上“无头”选项,它就不再起作用了。当我试图以headless模式打印

  • 我还是想不通。几天前我的硒工作得很好;现在它给我带来了一些错误。我首先使用Nuget,然后我尝试手动安装它。 如何重现问题: 错误: OpenQA. Selenium.WebDriverExcture:抛出一个带有空响应的异常,向远程WebDriver服务器发送HTTP请求以获取URLhttp://localhost:60695/session.异常的状态为ReceiveFailure,消息为:基

  • 我试图做深度链接,这样当有人从移动浏览器打开链接时,它要么打开应用程序,如果安装了,要么打开播放商店链接下载应用程序。 以下是我的URI: 当我在Android系统上的Mozilla Firefox应用程序中输入这个时,如果安装了我的应用程序,它会打开该应用程序;如果未安装,它会打开play store链接。但是,当我在Chrome中输入相同的内容时,它只会进行谷歌搜索,而不是打开应用程序或pla

  • 我不是100%确定是正确的公式,但我尝试的是: 我想修改上面的公式来做以下事情。我有一个多标签谷歌表。只有一个选项卡将所有数据存储为元数据,以填充其他6个选项卡。我将元数据拆分为6个选项卡,但希望避免重复选项卡中的数据。因此,我想创建一个列,显示数据当前的位置(如果已经放置)。以下是一个例子: 主表有以下数据: 将有4个标签,我有相同的列(姓名,电话,地址,电子邮件)。我将把主控表中的数据拆分为这

  • 我在过去的一周里一直在处理这个问题,脑子里想不起来,所以我决定寻求帮助。我正在尝试使用Chromium 86构建在AWS Lambda中运行Selenium。我不断收到的错误消息如下: 以下是我的版本: 这是我的代码: 到目前为止我已经尝试过的事情: 尝试了各种运行时Python 3.6、3.7、3.8,但没有成功 尝试使用和不使用Lambda层。尝试使用Lambda逐层文件夹结构时相对简单: C

  • 我开始学习在线教程,在我的单个本地VM上配置多个NDOE。以下是主节点上的主机: 下面是用于工作的命令: 现在我看到下面的错误消息: 我的配置有什么问题?我应该在哪里检查和纠正它? 非常感谢。