如何以 root 身份 运行 selenium chromedriver? (即使使用 --no-sandbox 也不行
How to run selenium chromedriver as root? (not working even with --no-sandbox
我正在尝试 运行 chrome 驱动程序来创建一些 selenium 测试。我按照这个 manual 来安装它。我正在尝试 运行 此代码:
from selenium import webdriver
driver = webdriver.Chrome(chrome_options=options)
当我以普通用户身份调用此 python 脚本时,它正在运行。但是当我以 root 身份调用它时(这对我来说是必需的),它不起作用。我尝试遵循一些建议,并尝试使用几个 Google chrome 选项,例如:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=options,
service_args=[
'--verbose',
'--log-path=/home/me/Projects/selenium.log'
]
)
但它仍然无法正常工作,这是日志的一部分:
[1,001][INFO]: COMMAND InitSession {
"capabilities": {
"alwaysMatch": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--no-sandbox" ],
"extensions": [ ]
},
"platformName": "any"
},
"firstMatch": [ {
} ]
},
"desiredCapabilities": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--no-sandbox" ],
"extensions": [ ]
},
"platform": "ANY",
"version": ""
}
}
[1,001][INFO]: Populating Preferences file: {
"alternate_error_pages": {
"enabled": false
},
"autofill": {
"enabled": false
},
"browser": {
"check_default_browser": false
},
"distribution": {
"import_bookmarks": false,
"import_history": false,
"import_search_engine": false,
"make_chrome_default_for_user": false,
"show_welcome_page": false,
"skip_first_run_ui": true
},
"dns_prefetching": {
"enabled": false
},
"profile": {
"content_settings": {
"pattern_pairs": {
"https://*,*": {
"media-stream": {
"audio": "Default",
"video": "Default"
}
}
}
},
"default_content_setting_values": {
"geolocation": 1
},
"default_content_settings": {
"geolocation": 1,
"mouselock": 1,
"notifications": 1,
"popups": 1,
"ppapi-broker": 1
},
"password_manager_enabled": false
},
"safebrowsing": {
"enabled": false
},
"search": {
"suggest_enabled": false
},
"translate": {
"enabled": false
}
}
[1,001][INFO]: Populating Local State file: {
"background_mode": {
"enabled": false
},
"ssl": {
"rev_checking": {
"enabled": false
}
}
}
[1,002][INFO]: Launching chrome: /opt/google/chrome/google-chrome --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-infobars --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-logging --ignore-certificate-errors --load-extension=/tmp/.org.chromium.Chromium.3rN146/internal --log-level=0 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12613 --safebrowsing-disable-auto-update --test-type=webdriver --use-mock-keychain --user-data-dir=/tmp/.org.chromium.Chromium.dOwaRR data:,
[1,002][DEBUG]: DevTools request: http://localhost:12613/json/version
[8523:8523:0216/145622.514842:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
奇怪的是,在InitSession命令中有--no-sandbox
参数,但是在启动Chrome时却没有。而是显示错误 Running as root without --no-sandbox is not supported.
。
有什么建议吗?
问题出在 chromedriver 版本。我使用的是 2.26 版。重新安装到当前版本 (2.35) 后,它开始工作。因此,只有一个强制参数 --no-sandbox
,现在一切正常。再次感谢。
我正在尝试 运行 chrome 驱动程序来创建一些 selenium 测试。我按照这个 manual 来安装它。我正在尝试 运行 此代码:
from selenium import webdriver
driver = webdriver.Chrome(chrome_options=options)
当我以普通用户身份调用此 python 脚本时,它正在运行。但是当我以 root 身份调用它时(这对我来说是必需的),它不起作用。我尝试遵循一些建议,并尝试使用几个 Google chrome 选项,例如:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=options,
service_args=[
'--verbose',
'--log-path=/home/me/Projects/selenium.log'
]
)
但它仍然无法正常工作,这是日志的一部分:
[1,001][INFO]: COMMAND InitSession {
"capabilities": {
"alwaysMatch": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--no-sandbox" ],
"extensions": [ ]
},
"platformName": "any"
},
"firstMatch": [ {
} ]
},
"desiredCapabilities": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--no-sandbox" ],
"extensions": [ ]
},
"platform": "ANY",
"version": ""
}
}
[1,001][INFO]: Populating Preferences file: {
"alternate_error_pages": {
"enabled": false
},
"autofill": {
"enabled": false
},
"browser": {
"check_default_browser": false
},
"distribution": {
"import_bookmarks": false,
"import_history": false,
"import_search_engine": false,
"make_chrome_default_for_user": false,
"show_welcome_page": false,
"skip_first_run_ui": true
},
"dns_prefetching": {
"enabled": false
},
"profile": {
"content_settings": {
"pattern_pairs": {
"https://*,*": {
"media-stream": {
"audio": "Default",
"video": "Default"
}
}
}
},
"default_content_setting_values": {
"geolocation": 1
},
"default_content_settings": {
"geolocation": 1,
"mouselock": 1,
"notifications": 1,
"popups": 1,
"ppapi-broker": 1
},
"password_manager_enabled": false
},
"safebrowsing": {
"enabled": false
},
"search": {
"suggest_enabled": false
},
"translate": {
"enabled": false
}
}
[1,001][INFO]: Populating Local State file: {
"background_mode": {
"enabled": false
},
"ssl": {
"rev_checking": {
"enabled": false
}
}
}
[1,002][INFO]: Launching chrome: /opt/google/chrome/google-chrome --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-infobars --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-logging --ignore-certificate-errors --load-extension=/tmp/.org.chromium.Chromium.3rN146/internal --log-level=0 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12613 --safebrowsing-disable-auto-update --test-type=webdriver --use-mock-keychain --user-data-dir=/tmp/.org.chromium.Chromium.dOwaRR data:,
[1,002][DEBUG]: DevTools request: http://localhost:12613/json/version
[8523:8523:0216/145622.514842:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
奇怪的是,在InitSession命令中有--no-sandbox
参数,但是在启动Chrome时却没有。而是显示错误 Running as root without --no-sandbox is not supported.
。
有什么建议吗?
问题出在 chromedriver 版本。我使用的是 2.26 版。重新安装到当前版本 (2.35) 后,它开始工作。因此,只有一个强制参数 --no-sandbox
,现在一切正常。再次感谢。