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
和设置权限问题解决后。
--用户数据目录选项
我尝试使用 --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
和设置权限问题解决后。