Python Selenium --user-data-dir option ERROR: could not remove old devtools port file

Python Selenium --user-data-dir option ERROR: could not remove old devtools port file

--用户数据目录选项

我尝试使用 --user-data-dir 选项打开 Chromedriver,但出现以下错误。我已经以多种方式尝试了 1 个月,但仍然没有头绪。请帮帮我!

错误信息是:

Traceback (most recent call last): File "C:\Users\owner\Desktop\MouseWithoutBorders\AutoCheckin.py", line 15, in driver = webdriver.Chrome(executable_path=r"C:\Users\owner\Desktop\MouseWithoutBorders\chromedriver.exe", chrome_options=opts) File "C:\Users\owner\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 75, in init desired_capabilities=desired_capabilities) File "C:\Users\owner\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 156, in init self.start_session(capabilities, browser_profile) File "C:\Users\owner\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 251, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "C:\Users\owner\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute self.error_handler.check_response(response) File "C:\Users\owner\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Could not remove old devtools port file. Perhaps the given user-data-dir at C:\Users\owner\AppData\Local\Google\Chrome\ is still attached to a running Chrome or Chromium process. (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.17738 >x86_64)

我的python测试代码是:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
from myidez import ID, PW

opts = webdriver.ChromeOptions()
opts.add_argument('--start-maximized')
opts.add_argument('--headless')
opts.add_argument('--no-sandbox')
opts.add_argument('--disable-dev-shm-usage')
opts.add_argument('--disable-gpu')
opts.add_argument("--user-data-dir= C:\Users\owner\AppData\Local\Google\Chrome\User Data")
driver = webdriver.Chrome(executable_path=r"./chromedriver.exe", chrome_options=opts)

我发现这个错误来自铬代码 参考: https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/chrome_launcher.cc https://peter.sh/experiments/chromium-command-line-switches/

Status RemoveOldDevToolsActivePortFile(const base::FilePath& user_data_dir) {
  base::FilePath port_filepath = user_data_dir.Append(kDevToolsActivePort);
  // Note that calling DeleteFile on a path that doesn't exist returns True.
  if (base::DeleteFile(port_filepath, false)) {
    return Status(kOk);
  }
  return Status(
      kUnknownError,
      std::string("Could not remove old devtools port file. Perhaps "
                  "the given user-data-dir at ") +
          user_data_dir.AsUTF8Unsafe() +
          std::string(" is still attached to a running Chrome or Chromium "
                      "process."));
--user-data-dir= C:\Users\owner\AppData\Local\Google\Chrome\User Data

你有这个字符串,这是错误的,我在路径中使用双引号或空格时遇到了同样的问题,将它们删除。错误 "Could not remove old devtools port file" 表示 Chrome 在这种情况下从您那里得到的路径无效。删除空格后:

--user-data-dir=C:\Users\owner\AppData\Local\Google\Chrome\User Data

就我而言,此问题是由于在 Microsoft Defender 中启用了勒索软件保护并阻止 Selenium 访问我的文档文件夹中的文件夹。很明显我的代码没有做错,没有任何空格或特殊字符,我发现 Windows 与此有关。当我在 Windows Defender 的勒索软件保护选项卡中关闭“受控文件夹访问”时,该程序运行良好。可能不是你的问题,但值得检查。

在我的情况下,问题是没有权限访问该文件夹 (linux),在 chmod 和设置权限问题解决后。