Chrome headless 模式下 DevToolsActivePort file doesn't exist 問題

同事寫自動測試碰到這問題,但網路上能找到的答案都跟真實原因不同,所以記在這裡。先在 Linux 環境下以使用者 A 的身份執行

1
google-chrome --disable-gpu --headless "https://google.com/"

然後以使用者 B 執行同樣命令,就會出現類似這樣的錯誤:

1
[0514/015330.359583:ERROR:filesystem_posix.cc(63)] mkdir /tmp/Crashpad/new: Permission denied (13)

而如果是在 Selenium 裡面執行的話,最後出現的問題就是 DevToolsActivePort 檔案不存在,因為沒權限。

要解決也蠻簡單:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os.path

from selenium import webdriver


def main():
options = webdriver.ChromeOptions()
options.add_argument("disable-gpu")
options.add_argument("headless")
options.add_argument(f"crash-dumps-dir={os.path.expanduser('~/tmp/Crashpad')}")
driver = webdriver.Chrome(options=options)
driver.get("https://google.com/")
input("press enter")
driver.quit()


if __name__ == "__main__":
main()

在 home directory 底下開個 tmp/Crashpad 專門用來放就可以了。