我在 Python 中运行 Selenium 脚本没有任何问题。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.page_load_strategy = 'eager'
options.add_argument('--headless=new')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
我的chrome版本是116.0.5845.179。从 selenium 4.10.0 开始,驱动程序管理器已完全集成,并将根据需要静默下载驱动程序。不再需要手动安装 Chrome 驱动程序。所以,我的笔记本电脑上没有安装 chrome 驱动程序。
但是,当我在 Linux 服务器上执行相同操作时,浏览器无法启动。 Linux服务器是Ubuntu,没有图形用户界面。我在服务器上安装了版本117.0.5938.149的chrome。我运行脚本时收到以下错误:
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: Chrome failed to start: exited normally.
(session not created: DevToolsActivePort file doesn't exist)
(The process started from chrome location /opt/google/chrome/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
当我尝试在服务器上的终端上运行“google-chrome”时,收到以下错误:
[34407:34407:1008/225549.976145:ERROR:zygote_host_impl_linux.cc(100)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
除了我无法运行 chrome 之外,错误消息并没有告诉我太多信息。 如何在服务器上以浏览器无头模式运行脚本?
我通过将以下两行添加到
options
解决了这个问题
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')