Chromedriver 未删除临时文件夹中的作用域* 目录

问题描述 投票:0回答:3

Chromedriver 在执行结束时不会删除名为scoped_* 的文件夹。

测试完成后,Chromedriver 不会删除临时文件夹中的作用域* 目录

上述解决方案对我不起作用,我需要一个Python解决方案。

我的谷歌浏览器版本是:99.0.4844.74 64位 我尝试了 chromedriver 99.0.4844.51 和 ChromeDriver 99.0.4844.35

还在 driver.close() 和 driver.quit() 之后的每个脚本末尾尝试了此代码:

try:
    for f in glob.glob(r"C:\Windows\Temp\scoped_dir*"):
        shutil.rmtree(f)
except Exception as e:
        print(e)

输出:

[WinError 5] 访问被拒绝: 'C:\Windows\Temp\scoped_dir130892_1670710986\BrowserMetrics\BrowserMetrics-62347334-8E820.pma'

还尝试使用以下代码运行批处理文件:

@echo off
Taskkill /IM chromedriver.exe /F 
Taskkill /IM chrome.exe /F
cd /D %Temp%
for /d %%D in (scoped_dir*) do rd /s /q "%%D"
del /f /q *

输出:

SUCCESS: The process "chrome.exe" with PID 406028 has been terminated.

但它不会删除文件夹。

python selenium selenium-webdriver selenium-chromedriver temp
3个回答
2
投票

这个错误信息...

[WinError 5] Access is denied: 'C:\Windows\Temp\scoped_dir130892_1670710986\BrowserMetrics\BrowserMetrics-62347334-8E820.pma'

...意味着某些孩子仍在继续访问

BrowserMetrics-62347334-8E820.pma
。因此
shutil.rmtree()
失败并出现 WinError,因为该文件仍被其他进程访问。


深入研究

虽然你的程序已经执行完毕,但正如

@[email protected]
提到的:

这似乎是 ChromeDriver 和 Chrome 之间的竞争条件。 ChromeDriver 创建这些临时目录供 Chrome 使用,最后 ChromeDriver 尝试删除这些目录。 ChromeDriver 在执行删除之前等待主 Chrome 进程终止,但某些 Chrome 子进程可能仍在运行并保留这些目录,从而导致删除失败。目前 ChromeDriver 不会重试删除。添加一些重试可能是最简单的修复方法。

此问题已通过此 revision / commit 得到解决:

[Chromedriver] 需要时重试删除临时目录

ChromeDriver 有时可能无法删除临时目录 退出时,造成磁盘空间浪费。此更改添加了重试逻辑 在清理这些目录时。

并且可用于 ChromeDriver v2.30ChromeDriver v99.0.4844.51 这个问题似乎是一个回归。


tl;博士

WebDriver 在测试退出后不会删除配置文件目录


0
投票

[WinError 5] 访问被拒绝:'C:\Windows\Temp\scoped_dir130892_1670710986\BrowserMetrics\BrowserMetrics-62347334-8E820.pma'

您收到此错误的原因是因为 Windows 不允许 python 脚本更改 C:\Windows 文件夹中的文件。即使是管理员帐户,您也必须以管理员身份运行该文件。您可以通过右键单击 .py 文件并单击

Run as administrator
来完成此操作。这将允许脚本更改 C:\Windows 目录中的文件。

如果拒绝访问仍然存在,请查看此问题。此问题的另一个解决方案可能是安装 pydirectory


0
投票

我们也一直遇到这个问题。一位开发人员最近发现,对我们来说,这可能是由于最近添加的一种方法来终止 Chrome 驱动程序进程,其中 Driver.Quit() 未正确退出。该方法在 Driver.Quit() 之前执行,这可能导致 Driver.Quit() 或 Driver.Close(0 无法正确执行。到目前为止,这仅在本地进行了测试,并未在管道中进行测试;但是,早期结果显示这解决了scoped_dir文件被遗忘的问题。希望这对某人有帮助,因为我们在网上搜索了很多解决方案,甚至在chrome进程没有每小时运行时运行脚本化清理。

© www.soinside.com 2019 - 2024. All rights reserved.